Browse Source

contact within block now working

lookup-tables
Stephan Richter 5 years ago
parent
commit
d004fbfd6d
  1. 2
      pom.xml
  2. 3
      resources/css/style.css
  3. 4
      src/main/java/de/srsoftware/web4rail/Plan.java
  4. 5
      src/main/java/de/srsoftware/web4rail/Route.java
  5. 31
      src/main/java/de/srsoftware/web4rail/tiles/Block.java
  6. 27
      src/main/java/de/srsoftware/web4rail/tiles/BlockContact.java
  7. 6
      src/main/java/de/srsoftware/web4rail/tiles/Contact.java

2
pom.xml

@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>de.srsoftware</groupId>
<artifactId>web4rail</artifactId>
<version>1.2.46</version>
<version>1.2.47</version>
<name>Web4Rail</name>
<packaging>jar</packaging>
<description>Java Model Railway Control</description>

3
resources/css/style.css

@ -230,6 +230,9 @@ svg.straight .right{ @@ -230,6 +230,9 @@ svg.straight .right{
.active circle{
fill: #f57900;
}
.Block.active{
background: #f57900;
}
polygon.oneway{
fill: lime;

4
src/main/java/de/srsoftware/web4rail/Plan.java

@ -33,6 +33,7 @@ import de.srsoftware.web4rail.tags.Input; @@ -33,6 +33,7 @@ import de.srsoftware.web4rail.tags.Input;
import de.srsoftware.web4rail.tags.Label;
import de.srsoftware.web4rail.tags.Table;
import de.srsoftware.web4rail.tiles.Block;
import de.srsoftware.web4rail.tiles.BlockContact;
import de.srsoftware.web4rail.tiles.BlockH;
import de.srsoftware.web4rail.tiles.BlockV;
import de.srsoftware.web4rail.tiles.Bridge;
@ -301,7 +302,7 @@ public class Plan extends BaseClass{ @@ -301,7 +302,7 @@ public class Plan extends BaseClass{
Vector<Route> results = new Vector<>();
if (tile == null) return results;
Tile addedTile = route.add(tile,connector.from.inverse());
if (addedTile instanceof Block) {
if (addedTile instanceof Block) { // Route wird mit einem Block abgeschlossen
Map<Connector, State> cons = addedTile.connections(connector.from);
LOG.debug("Found {}, coming from {}.",addedTile,connector.from);
for (Connector con : cons.keySet()) { // falls direkt nach dem Block noch ein Kontakt kommt: diesen mit zu Route hinzufügen
@ -711,7 +712,6 @@ public class Plan extends BaseClass{ @@ -711,7 +712,6 @@ public class Plan extends BaseClass{
learningContact = null;
return;
}
if (isSet(contact)) contact.activate(active);
}

5
src/main/java/de/srsoftware/web4rail/Route.java

@ -194,6 +194,7 @@ public class Route extends BaseClass { @@ -194,6 +194,7 @@ public class Route extends BaseClass {
if (tile instanceof Block) {
endBlock = (Block) tile;
endDirection = direrction;
contacts.addAll(endBlock.contacts());
}
path.add(tile);
if (tile instanceof Contact) contacts.add((Contact) tile);
@ -296,11 +297,11 @@ public class Route extends BaseClass { @@ -296,11 +297,11 @@ public class Route extends BaseClass {
public Route begin(Block block,Direction to) {
// add those fields to clone, too!
contacts = new Vector<Contact>();
startBlock = block;
contacts = new Vector<Contact>(startBlock.contacts());
signals = new Vector<Signal>();
path = new Vector<Tile>();
turnouts = new HashMap<>();
startBlock = block;
startDirection = to;
path.add(block);
return this;

31
src/main/java/de/srsoftware/web4rail/tiles/Block.java

@ -159,6 +159,10 @@ public abstract class Block extends StretchableTile{ @@ -159,6 +159,10 @@ public abstract class Block extends StretchableTile{
return fieldset;
}
public Collection<? extends Contact> contacts() {
return internalContacts;
}
public abstract Direction directionA();
public abstract Direction directionB();
@ -194,6 +198,10 @@ public abstract class Block extends StretchableTile{ @@ -194,6 +198,10 @@ public abstract class Block extends StretchableTile{
}
return getWaitTime(NO_TAG).get(dir);
}
public int indexOf(BlockContact contact) {
return 1+internalContacts.indexOf(contact);
}
@Override
public JSONObject json() {
@ -203,6 +211,15 @@ public abstract class Block extends StretchableTile{ @@ -203,6 +211,15 @@ public abstract class Block extends StretchableTile{
JSONArray jWaitTimes = new JSONArray();
for (WaitTime wt : waitTimes) jWaitTimes.put(wt.json());
json.put(WAIT_TIMES, jWaitTimes);
JSONObject jContacts = null;
for (BlockContact contact : internalContacts) {
int addr = contact.addr();
if (addr != 0) {
if (isNull(jContacts)) jContacts = new JSONObject();
jContacts.put(contact.id().toString(), contact.addr());
}
}
if (isSet(jContacts)) json.put(CONTACT, jContacts);
return json;
}
@ -230,6 +247,10 @@ public abstract class Block extends StretchableTile{ @@ -230,6 +247,10 @@ public abstract class Block extends StretchableTile{
if (object instanceof JSONObject) waitTimes.add(new WaitTime(null).load((JSONObject) object));
});
}
if (json.has(CONTACT)) {
JSONObject jContact = json.getJSONObject(CONTACT);
for (String key : jContact.keySet()) new BlockContact(this).addr(jContact.getInt(key));
}
return super.load(json);
}
@ -260,6 +281,16 @@ public abstract class Block extends StretchableTile{ @@ -260,6 +281,16 @@ public abstract class Block extends StretchableTile{
return contact;
}
@Override
public void removeChild(BaseClass child) {
super.removeChild(child);
internalContacts.remove(child);
}
public void removeContact(BlockContact blockContact) {
internalContacts.remove(blockContact);
}
public static Select selector(Block preselected,Collection<Block> exclude) {
if (isNull(exclude)) exclude = new Vector<Block>();
Select select = new Select(Block.class.getSimpleName());

27
src/main/java/de/srsoftware/web4rail/tiles/BlockContact.java

@ -1,5 +1,10 @@ @@ -1,5 +1,10 @@
package de.srsoftware.web4rail.tiles;
import java.io.IOException;
import java.util.Map;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
public class BlockContact extends Contact {
@ -11,14 +16,16 @@ public class BlockContact extends Contact { @@ -11,14 +16,16 @@ public class BlockContact extends Contact {
@Override
public Contact addr(int address) {
super.addr(address);
Block block = (Block) parent();
return block.register(this);
Block block = (Block) parent();
block.removeContact(this);
if (address != 0) block.register(this);
return this;
}
@Override
public Id id() {
if (id == null) id = new Id();
return id;
Block block = ((Block)parent());
return new Id(block.name+":"+block.indexOf(this));
}
@Override
@ -26,8 +33,18 @@ public class BlockContact extends Contact { @@ -26,8 +33,18 @@ public class BlockContact extends Contact {
return parent().properties();
}
@Override
public Route route() {
return ((Block)parent()).route();
}
@Override
public Tag tag(Map<String, Object> replacements) throws IOException {
return ((Block)parent()).tag(replacements);
}
@Override
public String toString() {
return getClass().getSimpleName()+"("+addr+")";
return id().toString()+" ("+addr+")";
}
}

6
src/main/java/de/srsoftware/web4rail/tiles/Contact.java

@ -12,6 +12,7 @@ import org.json.JSONObject; @@ -12,6 +12,7 @@ import org.json.JSONObject;
import de.srsoftware.tools.Tag;
import de.srsoftware.web4rail.BaseClass;
import de.srsoftware.web4rail.Route;
import de.srsoftware.web4rail.Window;
import de.srsoftware.web4rail.actions.Action;
import de.srsoftware.web4rail.actions.ActionList;
@ -74,6 +75,7 @@ public class Contact extends Tile{ @@ -74,6 +75,7 @@ public class Contact extends Tile{
state = true;
if (isSet(timer)) timer.abort();
Context context = null;
Route route = route();
if (isSet(route)) {
context = route.context();
actions.fire(context);
@ -95,7 +97,7 @@ public class Contact extends Tile{ @@ -95,7 +97,7 @@ public class Contact extends Tile{
}
public Contact addr(int address) {
contactsByAddr.remove(addr); // alte ID aus der Map löschen
Contact oldContact = contactsByAddr.remove(addr); // alte ID aus der Map löschen
addr = address;
if (addr != 0) contactsByAddr.put(addr, this); // neue ID setzen
return this;
@ -204,7 +206,7 @@ public class Contact extends Tile{ @@ -204,7 +206,7 @@ public class Contact extends Tile{
public void stream() {
try {
Tag tag = super.tag(null);
Tag tag = tag(null);
if (state) tag.clazz(tag.get("class")+" active");
plan.stream("place "+tag);
} catch (IOException e) {

Loading…
Cancel
Save