Skip to content

Commit

Permalink
Add EntryExit, extend panel checks
Browse files Browse the repository at this point in the history
  • Loading branch information
dsand47 committed Feb 23, 2020
1 parent 9986561 commit 61f24bf
Show file tree
Hide file tree
Showing 12 changed files with 525 additions and 40 deletions.
24 changes: 17 additions & 7 deletions java/src/jmri/jmrit/display/Editor.java
Expand Up @@ -3392,49 +3392,59 @@ public List<NamedBeanUsageReport> getUsageReport(NamedBean bean) {
List<NamedBeanUsageReport> report = new ArrayList<>();
if (bean != null) {
getContents().forEach((pos) -> {
String data = getUsageData(pos);
if (pos instanceof MultiSensorIcon) {
MultiSensorIcon multi = (MultiSensorIcon) pos;
multi.getSensors().forEach((sensor) -> {
if (bean.equals(sensor)) {
report.add(new NamedBeanUsageReport("PositionalIcon", multi.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}
});

} else if (pos instanceof SlipTurnoutIcon) {
SlipTurnoutIcon slip3Scissor = (SlipTurnoutIcon) pos;
if (bean.equals(slip3Scissor.getTurnout(SlipTurnoutIcon.EAST))) {
report.add(new NamedBeanUsageReport("PositionalIcon", pos.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}
if (bean.equals(slip3Scissor.getTurnout(SlipTurnoutIcon.WEST))) {
report.add(new NamedBeanUsageReport("PositionalIcon", pos.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}
if (slip3Scissor.getNamedTurnout(SlipTurnoutIcon.LOWEREAST) != null) {
if (bean.equals(slip3Scissor.getTurnout(SlipTurnoutIcon.LOWEREAST))) {
report.add(new NamedBeanUsageReport("PositionalIcon", pos.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}
}
if (slip3Scissor.getNamedTurnout(SlipTurnoutIcon.LOWERWEST) != null) {
if (bean.equals(slip3Scissor.getTurnout(SlipTurnoutIcon.LOWERWEST))) {
report.add(new NamedBeanUsageReport("PositionalIcon", pos.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}
}

} else if (pos instanceof LightIcon) {
LightIcon icon = (LightIcon) pos;
if (bean.equals(icon.getLight())) {
report.add(new NamedBeanUsageReport("PositionalIcon", pos.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}

} else {
if (bean.equals(pos.getNamedBean())) {
report.add(new NamedBeanUsageReport("PositionalIcon", pos.getClass().getSimpleName()));
report.add(new NamedBeanUsageReport("PositionalIcon", data));
}
}
});
}
return report;
}

String getUsageData(Positionable pos) {
Point point = pos.getLocation();
String data = String.format("%s :: x=%d, y=%d",
pos.getClass().getSimpleName(),
Math.round(point.getX()),
Math.round(point.getY()));
return data;
}

// initialize logging
private final static Logger log = LoggerFactory.getLogger(Editor.class);
}
197 changes: 189 additions & 8 deletions java/src/jmri/jmrit/display/layoutEditor/LayoutEditor.java
Expand Up @@ -8041,22 +8041,203 @@ public TurnoutComboBoxPopupMenuListener newTurnoutComboBoxPopupMenuListener(Name
return new TurnoutComboBoxPopupMenuListener(comboBox, currentTurnouts);
}

List<NamedBeanUsageReport> usageReport;
@Override
public List<NamedBeanUsageReport> getUsageReport(NamedBean bean) {
List<NamedBeanUsageReport> report = new ArrayList<>();
usageReport = new ArrayList<>();
if (bean != null) {
report = super.getUsageReport(bean);
usageReport = super.getUsageReport(bean);

// LE Specific checks
for (LayoutTurnout turnout : getLayoutTurnoutsAndSlips()) {
if (bean.equals(turnout.getTurnout())) {
report.add(new NamedBeanUsageReport("LayoutEditorTurnout", turnout.getClass().getSimpleName()));
// Turnouts
findTurnoutUsage(bean);

// Check A, EB, EC for sensors, masts, heads
findPositionalUsage(bean);

// Level Crossings
findXingWhereUsed(bean);

// Track segments
findSegmentWhereUsed(bean);
}
return usageReport;
}

void findTurnoutUsage(NamedBean bean) {
for (LayoutTurnout turnout : getLayoutTurnoutsAndSlips()) {
String data = getUsageData(turnout);

if (bean.equals(turnout.getTurnout())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnout", data));
}
if (bean.equals(turnout.getSecondTurnout())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnout2", data));
}

if (isLBLockUsed(bean, turnout.getLayoutBlock())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutBlock", data));
}
if (turnout.getTurnoutType() > LayoutTurnout.WYE_TURNOUT) {
if (isLBLockUsed(bean, turnout.getLayoutBlockB())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutBlock", data));
}
if (isLBLockUsed(bean, turnout.getLayoutBlockC())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutBlock", data));
}
if (bean.equals(turnout.getSecondTurnout())) {
report.add(new NamedBeanUsageReport("LayoutEditorTurnout2", turnout.getClass().getSimpleName()));
if (isLBLockUsed(bean, turnout.getLayoutBlockD())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutBlock", data));
}
}

if (bean.equals(turnout.getSensorA())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSensor", data));
}
if (bean.equals(turnout.getSensorB())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSensor", data));
}
if (bean.equals(turnout.getSensorC())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSensor", data));
}
if (bean.equals(turnout.getSensorD())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSensor", data));
}

if (bean.equals(turnout.getSignalAMast())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalMast", data));
}
if (bean.equals(turnout.getSignalBMast())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalMast", data));
}
if (bean.equals(turnout.getSignalCMast())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalMast", data));
}
if (bean.equals(turnout.getSignalDMast())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalMast", data));
}

if (bean.equals(turnout.getSignalA1())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalA2())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalA3())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalB1())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalB2())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalC1())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalC2())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalD1())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
if (bean.equals(turnout.getSignalD2())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorTurnoutSignalHead", data));
}
}
return report;
}

void findPositionalUsage(NamedBean bean) {
for (PositionablePoint point : getPositionablePoints()) {
String data = getUsageData(point);
if (bean.equals(point.getEastBoundSensor())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorPointSensor", data));
}
if (bean.equals(point.getWestBoundSensor())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorPointSensor", data));
}
if (bean.equals(point.getEastBoundSignalHead())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorPointSignalHead", data));
}
if (bean.equals(point.getWestBoundSignalHead())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorPointSignalHead", data));
}
if (bean.equals(point.getEastBoundSignalMast())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorPointSignalMast", data));
}
if (bean.equals(point.getWestBoundSignalMast())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorPointSignalMast", data));
}
}
}

void findSegmentWhereUsed(NamedBean bean) {
for (TrackSegment segment : getTrackSegments()) {
if (isLBLockUsed(bean, segment.getLayoutBlock())) {
String data = getUsageData(segment);
usageReport.add(new NamedBeanUsageReport("LayoutEditorSegmentBlock", data));
}
}
}

void findXingWhereUsed(NamedBean bean) {
for (LevelXing xing : getLevelXings()) {
String data = getUsageData(xing);
if (isLBLockUsed(bean, xing.getLayoutBlockAC())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorXingBlock", data));
}
if (isLBLockUsed(bean, xing.getLayoutBlockBD())) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorXingBlock", data));
}
if (isUsedInXing(bean, xing, LevelXing.POINTA)) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorXingOther", data));
}
if (isUsedInXing(bean, xing, LevelXing.POINTB)) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorXingOther", data));
}
if (isUsedInXing(bean, xing, LevelXing.POINTC)) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorXingOther", data));
}
if (isUsedInXing(bean, xing, LevelXing.POINTD)) {
usageReport.add(new NamedBeanUsageReport("LayoutEditorXingOther", data));
}
}
}

String getUsageData(LayoutTrack track) {
Point2D point = track.getCoordsCenter();
if (track instanceof TrackSegment) {
TrackSegment segment = (TrackSegment) track;
point = new Point2D.Double(segment.getCentreSegX(), segment.getCentreSegY());
}
String data = String.format("%s :: x=%d, y=%d",
track.getClass().getSimpleName(),
Math.round(point.getX()),
Math.round(point.getY()));
return data;
}

boolean isLBLockUsed(NamedBean bean, LayoutBlock lblock) {
boolean result = false;
if (lblock != null) {
if (bean.equals(lblock.getBlock())) {
result = true;
}
}
return result;
}

boolean isUsedInXing(NamedBean bean, LevelXing xing, int point) {
boolean result = false;
if (bean.equals(xing.getSensor(point))) {
result = true;
}
if (bean.equals(xing.getSignalHead(point))) {
result = true;
}
if (bean.equals(xing.getSignalMast(point))) {
result = true;
}
return result;
}

//initialize logging
Expand Down
20 changes: 20 additions & 0 deletions java/src/jmri/jmrit/entryexit/DestinationPoints.java
Expand Up @@ -1268,6 +1268,26 @@ void setActiveEntryExit(boolean boo) {

}

@Override
public List<NamedBeanUsageReport> getUsageReport(NamedBean bean) {
List<NamedBeanUsageReport> report = new ArrayList<>();
if (bean != null) {
if (bean.equals(getSource().getPoint().getSensor())) {
report.add(new NamedBeanUsageReport("EntryExitSourceSensor")); // NOI18N
}
if (bean.equals(getSource().getPoint().getSignal())) {
report.add(new NamedBeanUsageReport("EntryExitSourceSignal")); // NOI18N
}
if (bean.equals(getDestPoint().getSensor())) {
report.add(new NamedBeanUsageReport("EntryExitDestinationSensor")); // NOI18N
}
if (bean.equals(getDestPoint().getSignal())) {
report.add(new NamedBeanUsageReport("EntryExitDesinationSignal")); // NOI18N
}
}
return report;
}

private final static Logger log = LoggerFactory.getLogger(DestinationPoints.class);

}
3 changes: 2 additions & 1 deletion java/src/jmri/jmrit/whereused/Bundle.properties
Expand Up @@ -24,13 +24,14 @@ ReferenceBlock = Block references
ReferenceLayoutBlock = Layout Block references
ReferenceOBlock = OBlock/Portal/OPath references
ReferenceWarrant = Warrant references
ReferenceEntryExit = Entry/Exit references
ReferenceHeadSSL = Signal head SSL references
ReferenceMastSML = Signal mast SML references
ReferenceSignalGroup = Signal Group references
ReferenceConditionals = Logix Conditional references
ReferenceSections = Section references
ReferenceTransits = Transit references
ReferencePanels = Panel icon references
ReferencePanels = Panel references

ReferenceLineName = \n\t\t{0}\t
ReferenceLineData = \n\t\t{0} {1}\t
Expand Down
29 changes: 29 additions & 0 deletions java/src/jmri/jmrit/whereused/EntryExitWhereUsed.java
@@ -0,0 +1,29 @@
package jmri.jmrit.whereused;

import javax.swing.JTextArea;
import jmri.NamedBean;

/**
* Find entry/exit references.
*
* @author Dave Sand Copyright (C) 2020
*/

public class EntryExitWhereUsed {

/**
* Populate a textarea with the where used content for the supplied bean.
* @param entryexit The entry/exit bean.
* @return a populated textarea.
*/
static public JTextArea getWhereUsed(NamedBean entryexit) {
JTextArea textArea = new JTextArea();
String label = Bundle.getMessage("MakeLabel", Bundle.getMessage("BeanNameEntryExit")); // NOI18N
textArea.append(Bundle.getMessage("ReferenceTitle", label, entryexit.getDisplayName())); // NOI18N
textArea.append(Bundle.getMessage("ListenerCount", entryexit.getNumPropertyChangeListeners())); // NOI18N

textArea.append(WhereUsedCollectors.checkLogixConditionals(entryexit));
textArea.append(WhereUsedCollectors.checkEntryExit(entryexit));
return textArea;
}
}
1 change: 1 addition & 0 deletions java/src/jmri/jmrit/whereused/SensorWhereUsed.java
Expand Up @@ -30,6 +30,7 @@ static public JTextArea getWhereUsed(NamedBean sensor) {
textArea.append(WhereUsedCollectors.checkSignalMastLogic(sensor));
textArea.append(WhereUsedCollectors.checkSignalGroup(sensor));
textArea.append(WhereUsedCollectors.checkOBlocks(sensor));
textArea.append(WhereUsedCollectors.checkEntryExit(sensor));
textArea.append(WhereUsedCollectors.checkLogixConditionals(sensor));
textArea.append(WhereUsedCollectors.checkSections(sensor));
textArea.append(WhereUsedCollectors.checkTransits(sensor));
Expand Down
1 change: 1 addition & 0 deletions java/src/jmri/jmrit/whereused/SignalHeadWhereUsed.java
Expand Up @@ -26,6 +26,7 @@ static public JTextArea getWhereUsed(NamedBean signalHead) {
textArea.append(WhereUsedCollectors.checkSignalGroup(signalHead));
textArea.append(WhereUsedCollectors.checkOBlocks(signalHead));
textArea.append(WhereUsedCollectors.checkWarrants(signalHead));
textArea.append(WhereUsedCollectors.checkEntryExit(signalHead));
textArea.append(WhereUsedCollectors.checkLogixConditionals(signalHead));
textArea.append(WhereUsedCollectors.checkPanels(signalHead));
textArea.append(WhereUsedCollectors.checkCTC(signalHead));
Expand Down
1 change: 1 addition & 0 deletions java/src/jmri/jmrit/whereused/SignalMastWhereUsed.java
Expand Up @@ -26,6 +26,7 @@ static public JTextArea getWhereUsed(NamedBean signalMast) {
textArea.append(WhereUsedCollectors.checkSignalGroup(signalMast));
textArea.append(WhereUsedCollectors.checkOBlocks(signalMast));
textArea.append(WhereUsedCollectors.checkWarrants(signalMast));
textArea.append(WhereUsedCollectors.checkEntryExit(signalMast));
textArea.append(WhereUsedCollectors.checkLogixConditionals(signalMast));
textArea.append(WhereUsedCollectors.checkPanels(signalMast));
textArea.append(WhereUsedCollectors.checkCTC(signalMast));
Expand Down

0 comments on commit 61f24bf

Please sign in to comment.