public void setRoot(AbstractEntity e) { if (e != null) { game = e; game.addEntityListener(this); setEntityListener(game); AbstractEntity arr[] = {e}; fireTreeStructureChanged(new TreeModelEvent(e, arr)); } }
// TODO: throw ClassCastException? public AbstractEntity insertNewEntity(Object parent) { // wenn das übergebene Objekt null ist muss eine neue Armeeliste // angelegt werden EntityType type; if (parent == null) { type = EntityType.ARMYLIST; parent = game; } else type = EntityType.UPGRADE; // create new ArmyListEntity with the given Name from language-file AbstractEntity newEntity = new ArmyListEntity(type, TextWrapper.getString("ArmyListModel.0")); newEntity.addEntityListener(this); Tatoo.cmdMgr.execute(new CmdInsertEntityChild((AbstractEntity) parent, newEntity)); return newEntity; }
private void setEntityListener(AbstractEntity entity) { for (AbstractEntity ae : entity.getChilds()) { ae.addEntityListener(this); setEntityListener(ae); } }
@Override public AbstractEntity insertCopyOf(Object[] treePath) { AbstractEntity orignalRoot = game; // Wenn der Root in der Armeeliste noch keine Kinder hat, handelt es // sich um den Standardmäßig eingefügten Knoten, welcher // nur eingefügt wurde weil es sonst in der Anzeige zu Exceptions kommt. // Er muss also ersetzt // werden durch den ersten Knoten im TreePath als neue Wurzel. if (((AbstractEntity) getRoot()).getChildCount() == 0 && treePath.length > 0) { // Kopie erzeugen: try { game = ((AbstractEntity) treePath[0]).cloneFor(null); game.addEntityListener(this); } catch (CloneNotSupportedException e) { e.printStackTrace(); game = orignalRoot; return null; } } if (game == null) return null; // das erste Object im Array MUSS der root-Knoten sein, sonst ist es // kein gültiger Pfad! // TODO: hier eventuell Exception schmeißen bei ungültigem Pfad. if (treePath[0].equals(getRoot()) && treePath.length > 1) { boolean found = false; AbstractEntity treeNode = game; AbstractEntity parent = treeNode; // den Pfad vom Knoten eins bis Ende durchlaufen for (int i = 1; i < treePath.length - 1; i++) { // prüfen ob der Knoten schon enthalten ist // aber nur wenn es sich nicht um das Pfadblatt handelt. // wenn der Knoten nicht enthalten ist: anlegen found = false; for (int j = 0; j < treeNode.getChildCount() && !found; j++) { if (treeNode.getEntityAt(j).equals((AbstractEntity) treePath[i])) { found = true; parent = treeNode; treeNode = treeNode.getEntityAt(j); } } if (!found) { AbstractEntity newNode; try { newNode = ((AbstractEntity) treePath[i]).cloneFor(parent); } catch (CloneNotSupportedException e) { e.printStackTrace(); game = orignalRoot; return null; } newNode.addEntityListener(this); newNode.setParent(parent); Tatoo.cmdMgr.add(new CmdInsertEntityChild(treeNode, newNode)); parent = treeNode; treeNode = newNode; } } // den letzten Knoten auf jeden Fall hinzufügen // (hier darf nicht mehr auf equals getestet werden) AbstractEntity newNode; try { newNode = ((AbstractEntity) treePath[treePath.length - 1]).cloneFor(parent); } catch (CloneNotSupportedException e) { e.printStackTrace(); game = orignalRoot; return null; } newNode.addEntityListener(this); newNode.setParent(parent); Tatoo.cmdMgr.add(new CmdInsertEntityChild(treeNode, newNode)); Tatoo.cmdMgr.execute(); return newNode; } return null; }