Skip to content

Commit

Permalink
Merge pull request #13191 from danielb987/LogixNG_Refactorization
Browse files Browse the repository at this point in the history
Let LogixNG expression Reporter use indirect addressing
  • Loading branch information
danielb987 committed Jun 19, 2024
2 parents 405f996 + e8699f7 commit 978d0a5
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 24 deletions.
2 changes: 2 additions & 0 deletions help/en/releasenotes/current-draft-note.shtml
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,8 @@
<h3>LogixNG</h3>
<a id="LogixNG" name="LogixNG"></a>
<ul>
<li>The expression <strong>Reporter</strong> can now use
indirect addressing for selecting the Reporter.</li>
<li></li>
</ul>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import jmri.jmrit.logixng.expressions.ExpressionReporter.ReporterOperation;
import jmri.jmrit.logixng.expressions.ExpressionReporter.ReporterValue;
import jmri.jmrit.logixng.swing.SwingConfiguratorInterface;
import jmri.jmrit.logixng.util.swing.LogixNG_SelectNamedBeanSwing;
import jmri.util.swing.BeanSelectPanel;
import jmri.util.swing.JComboBoxUtil;

Expand All @@ -25,7 +26,7 @@
*/
public class ExpressionReporterSwing extends AbstractDigitalExpressionSwing {

private BeanSelectPanel<Reporter> _reporterBeanPanel;
private LogixNG_SelectNamedBeanSwing<Reporter> _selectNamedBeanSwing;
private JComboBox<ReporterValue> _reporterValueComboBox;
private JComboBox<ReporterOperation> _reporterOperationComboBox;
private JCheckBox _caseInsensitiveCheckBox;
Expand Down Expand Up @@ -65,7 +66,16 @@ protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPane

panel = new JPanel();

_reporterBeanPanel = new BeanSelectPanel<>(InstanceManager.getDefault(ReporterManager.class), null);
_selectNamedBeanSwing = new LogixNG_SelectNamedBeanSwing<>(
InstanceManager.getDefault(ReporterManager.class), getJDialog(), this);

JPanel _tabbedPaneNamedBean;

if (expression != null) {
_tabbedPaneNamedBean = _selectNamedBeanSwing.createPanel(expression.getSelectNamedBean());
} else {
_tabbedPaneNamedBean = _selectNamedBeanSwing.createPanel(null);
}

_reporterValuePanel = new JPanel();
_reporterValueComboBox = new JComboBox<>();
Expand Down Expand Up @@ -123,9 +133,6 @@ protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPane


if (expression != null) {
if (expression.getSelectNamedBean().getNamedBean() != null) {
_reporterBeanPanel.setDefaultNamedBean(expression.getSelectNamedBean().getNamedBean().getBean());
}
if (expression.getSelectMemoryNamedBean().getNamedBean() != null) {
_compareToMemoryBeanPanel.setDefaultNamedBean(expression.getSelectMemoryNamedBean().getNamedBean().getBean());
}
Expand All @@ -145,7 +152,7 @@ protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPane
}

JComponent[] components = new JComponent[]{
_reporterBeanPanel,
_tabbedPaneNamedBean,
_reporterValuePanel,
operationAndCasePanel,
_tabbedPane
Expand All @@ -162,9 +169,14 @@ protected void createPanel(@CheckForNull Base object, @Nonnull JPanel buttonPane
/** {@inheritDoc} */
@Override
public boolean validate(@Nonnull List<String> errorMessages) {
if (_reporterBeanPanel.getNamedBean() == null) {
// Create a temporary expression to test formula
ExpressionReporter expression = new ExpressionReporter("IQDE1", null);

if (_selectNamedBeanSwing.getAddressing() == NamedBeanAddressing.Direct
&& _selectNamedBeanSwing.getBean() == null) {
errorMessages.add(Bundle.getMessage("Reporter_No_Reporter"));
}
_selectNamedBeanSwing.validate(expression.getSelectNamedBean(), errorMessages);
return errorMessages.isEmpty();
}

Expand All @@ -183,16 +195,8 @@ public void updateObject(@Nonnull Base object) {
throw new IllegalArgumentException("object must be an ExpressionReporter but is a: "+object.getClass().getName());
}
ExpressionReporter expression = (ExpressionReporter)object;
Reporter reporter = _reporterBeanPanel.getNamedBean();

if (reporter != null) {
NamedBeanHandle<Reporter> handle
= InstanceManager.getDefault(NamedBeanHandleManager.class)
.getNamedBeanHandle(reporter.getDisplayName(), reporter);
expression.getSelectNamedBean().setNamedBean(handle);
} else {
expression.getSelectNamedBean().removeNamedBean();
}

_selectNamedBeanSwing.updateObject(expression.getSelectNamedBean());

expression.setReporterValue(_reporterValueComboBox.getItemAt(_reporterValueComboBox.getSelectedIndex()));
expression.setReporterOperation(_reporterOperationComboBox.getItemAt(_reporterOperationComboBox.getSelectedIndex()));
Expand Down Expand Up @@ -244,11 +248,11 @@ public String toString() {

@Override
public void setDefaultValues() {
if (_reporterBeanPanel.getNamedBean() == null) {
if (_selectNamedBeanSwing.getBean() == null) {
SortedSet<Reporter> set = InstanceManager.getDefault(ReporterManager.class).getNamedBeanSet();
if (!set.isEmpty()) {
Reporter r = set.first();
_reporterBeanPanel.setDefaultNamedBean(r);
_selectNamedBeanSwing.getBeanSelectPanel().setDefaultNamedBean(r);
} else {
log.error("Reporter manager has no reporters. Can't set default values");
}
Expand All @@ -257,6 +261,7 @@ public void setDefaultValues() {

@Override
public void dispose() {
_selectNamedBeanSwing.dispose();
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public String toString() {

@Override
public void dispose() {
_selectNamedBeanSwing.dispose();
}


Expand Down
27 changes: 22 additions & 5 deletions java/test/jmri/ArchitectureTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -391,28 +391,45 @@ static public void tearDown() {
.should()
.dependOnClassesThat().haveFullyQualifiedName("jmri.NamedBeanHandle");

/*.*
/**
* No classes in jmri.jmrit.logixng.actions should access jmri.NamedBeanHandle.
* They should use jmri.jmrit.logixng.util.LogixNG_SelectNamedBean instead.
*./
*/
@ArchTest
public static final ArchRule checkLogixNGActionsNotUsingBeanSelectPanel = noClasses()
.that()
.resideInAPackage("jmri.jmrit.logixng.actions..")
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionCreateBeansFromTableSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionFindTableRowOrColumnSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionListenOnBeansTableSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionLocalVariableSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionMemorySwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionOBlockSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionReporterSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionSetReporterSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionSignalHeadSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionSignalMastSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionTableSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.ActionWarrantSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.actions.swing.TableForEachSwing") // Not converted to Select... yet
.should()
.dependOnClassesThat().haveFullyQualifiedName("jmri.util.swing.BeanSelectPanel");

/*.*
/**
* No classes in jmri.jmrit.logixng.expressions should access jmri.NamedBeanHandle.
* They should use jmri.jmrit.logixng.util.LogixNG_SelectNamedBean instead.
*./
*/
@ArchTest
public static final ArchRule checkLogixNGExpressionsNotUsingBeanSelectPanel = noClasses()
.that()
.resideInAPackage("jmri.jmrit.logixng.expressions..")
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.expressions.swing.ExpressionLocalVariableSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.expressions.swing.ExpressionMemorySwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.expressions.swing.ExpressionReporterSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.expressions.swing.ExpressionSignalHeadSwing") // Not converted to Select... yet
.and().doNotHaveFullyQualifiedName("jmri.jmrit.logixng.expressions.swing.ExpressionSignalMastSwing") // Not converted to Select... yet
.should()
.dependOnClassesThat().haveFullyQualifiedName("jmri.util.swing.BeanSelectPanel");
*/

/**
* No classes in jmri.jmrit.logixng.actions should access jmri.jmrit.logixng.NamedBeanAddressing.
Expand Down

0 comments on commit 978d0a5

Please sign in to comment.