CAY-2001 | Saving a display state of Project
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/1f514c4b Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/1f514c4b Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/1f514c4b Branch: refs/heads/master Commit: 1f514c4b151cc66673d1445cf88844473bce4942 Parents: 2888668 Author: Savva Kolbachev <s.kolbac...@gmail.com> Authored: Fri Apr 17 14:14:38 2015 +0300 Committer: Savva Kolbachev <s.kolbac...@gmail.com> Committed: Fri Apr 17 14:21:32 2015 +0300 ---------------------------------------------------------------------- .../modeler/CayenneModelerController.java | 10 +- .../cayenne/modeler/util/ProjectStateUtil.java | 785 ------------------- .../util/state/AttributeDisplayEventType.java | 107 +++ .../util/state/DataMapDisplayEventType.java | 58 ++ .../util/state/DataNodeDisplayEventType.java | 55 ++ .../modeler/util/state/DisplayEventType.java | 76 ++ .../modeler/util/state/DisplayEventTypes.java | 198 +++++ .../util/state/DomainDisplayEventType.java | 49 ++ .../EmbeddableAttributeDisplayEventType.java | 98 +++ .../util/state/EmbeddableDisplayEventType.java | 62 ++ .../util/state/EntityDisplayEventType.java | 84 ++ .../state/MultipleObjectsDisplayEventType.java | 166 ++++ .../util/state/ProcedureDisplayEventType.java | 63 ++ .../ProcedureParameterDisplayEventType.java | 93 +++ .../modeler/util/state/ProjectStateUtil.java | 72 ++ .../util/state/QueryDisplayEventType.java | 62 ++ .../state/RelationshipDisplayEventType.java | 107 +++ 17 files changed, 1356 insertions(+), 789 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java index 9f32197..ac77093 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java @@ -28,7 +28,7 @@ import org.apache.cayenne.modeler.pref.ComponentGeometry; import org.apache.cayenne.modeler.pref.FSPath; import org.apache.cayenne.modeler.util.CayenneController; import org.apache.cayenne.modeler.util.FileFilters; -import org.apache.cayenne.modeler.util.ProjectStateUtil; +import org.apache.cayenne.modeler.util.state.ProjectStateUtil; import org.apache.cayenne.project.Project; import org.apache.cayenne.project.validation.ProjectValidator; import org.apache.cayenne.validation.ValidationFailure; @@ -57,6 +57,8 @@ import java.util.prefs.Preferences; */ public class CayenneModelerController extends CayenneController { + private static final ProjectStateUtil PROJECT_STATE_UTIL = new ProjectStateUtil(); + protected ProjectController projectController; protected CayenneModelerFrame frame; @@ -107,7 +109,7 @@ public class CayenneModelerController extends CayenneController { frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { - ProjectStateUtil.saveLastState(projectController); + PROJECT_STATE_UTIL.saveLastState(projectController); getApplication().getActionManager().getAction(ExitAction.class).exit(); } }); @@ -190,7 +192,7 @@ public class CayenneModelerController extends CayenneController { * Action method invoked on project closing. */ public void projectClosedAction() { - ProjectStateUtil.saveLastState(projectController); + PROJECT_STATE_UTIL.saveLastState(projectController); // --- update view frame.setView(null); @@ -241,7 +243,7 @@ public class CayenneModelerController extends CayenneController { frame.fireRecentFileListChanged(); } - ProjectStateUtil.fireLastState(projectController); + PROJECT_STATE_UTIL.fireLastState(projectController); // for validation purposes combine load failures with post-load validation (not // sure if that'll cause duplicate messages?). http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectStateUtil.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectStateUtil.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectStateUtil.java deleted file mode 100644 index 98158ba..0000000 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ProjectStateUtil.java +++ /dev/null @@ -1,785 +0,0 @@ -/***************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - ****************************************************************/ - -package org.apache.cayenne.modeler.util; - -import org.apache.cayenne.configuration.ConfigurationNode; -import org.apache.cayenne.configuration.DataChannelDescriptor; -import org.apache.cayenne.configuration.DataNodeDescriptor; -import org.apache.cayenne.map.Attribute; -import org.apache.cayenne.map.DataMap; -import org.apache.cayenne.map.DbAttribute; -import org.apache.cayenne.map.DbEntity; -import org.apache.cayenne.map.DbRelationship; -import org.apache.cayenne.map.Embeddable; -import org.apache.cayenne.map.EmbeddableAttribute; -import org.apache.cayenne.map.Entity; -import org.apache.cayenne.map.ObjAttribute; -import org.apache.cayenne.map.ObjEntity; -import org.apache.cayenne.map.ObjRelationship; -import org.apache.cayenne.map.Procedure; -import org.apache.cayenne.map.ProcedureParameter; -import org.apache.cayenne.map.Relationship; -import org.apache.cayenne.modeler.ProjectController; -import org.apache.cayenne.modeler.event.AttributeDisplayEvent; -import org.apache.cayenne.modeler.event.DataMapDisplayEvent; -import org.apache.cayenne.modeler.event.DataNodeDisplayEvent; -import org.apache.cayenne.modeler.event.DisplayEvent; -import org.apache.cayenne.modeler.event.DomainDisplayEvent; -import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent; -import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent; -import org.apache.cayenne.modeler.event.EntityDisplayEvent; -import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent; -import org.apache.cayenne.modeler.event.ProcedureDisplayEvent; -import org.apache.cayenne.modeler.event.ProcedureParameterDisplayEvent; -import org.apache.cayenne.modeler.event.QueryDisplayEvent; -import org.apache.cayenne.modeler.event.RelationshipDisplayEvent; -import org.apache.cayenne.modeler.pref.ProjectStatePreferences; -import org.apache.cayenne.query.Query; -import org.apache.cayenne.util.CayenneMapEntry; - -import java.util.ArrayList; -import java.util.List; -import java.util.prefs.BackingStoreException; - -public final class ProjectStateUtil { - - private static ProjectStatePreferences preferences; - - private ProjectStateUtil() { - } - - public static void saveLastState(ProjectController controller) { - DisplayEvent displayEvent = controller.getLastDisplayEvent(); - Object[] multiplyObjects = controller.getCurrentPaths(); - - if (displayEvent == null && multiplyObjects == null) { - return; - } - - preferences = controller.getProjectStatePreferences(); - if (preferences.getCurrentPreference() == null) { - return; - } - - try { - preferences.getCurrentPreference().clear(); - } catch (BackingStoreException e) { - // ignore exception - } - - if (displayEvent != null) { - DisplayEventType.valueOf(displayEvent.getClass().getSimpleName()).saveLastDisplayEvent(controller); - } else { - DisplayEventType.MultipleObjectsDisplayEvent.saveLastDisplayEvent(controller); - } - } - - public static void fireLastState(ProjectController controller) { - preferences = controller.getProjectStatePreferences(); - - String displayEventName = preferences.getEvent(); - if (!displayEventName.isEmpty()) { - DisplayEventType.valueOf(displayEventName).fireLastDisplayEvent(controller); - } - } - - private static enum DisplayEventType { - - DomainDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DomainDisplayEvent domainDisplayEvent = new DomainDisplayEvent(this, dataChannel); - controller.fireDomainDisplayEvent(domainDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(DomainDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - } - }, - - DataNodeDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); - if (dataNode == null) { - return; - } - - DataNodeDisplayEvent dataNodeDisplayEvent = new DataNodeDisplayEvent(this, dataChannel, dataNode); - controller.fireDataNodeDisplayEvent(dataNodeDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(DataNodeDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setNode(controller.getCurrentDataNode().getName()); - } - }, - - DataMapDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - DataMapDisplayEvent dataMapDisplayEvent = new DataMapDisplayEvent(this, dataMap, dataChannel, dataNode); - controller.fireDataMapDisplayEvent(dataMapDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(DataMapDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - } - }, - - EntityDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Entity entity = getLastEntity(dataMap); - if (entity == null) { - return; - } - - EntityDisplayEvent entityDisplayEvent = new EntityDisplayEvent(this, entity, dataMap, dataNode, dataChannel); - if (entity instanceof ObjEntity) { - controller.fireObjEntityDisplayEvent(entityDisplayEvent); - } else if (entity instanceof DbEntity) { - controller.fireDbEntityDisplayEvent(entityDisplayEvent); - } - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - if (controller.getCurrentObjAttributes().length != 0 || controller.getCurrentDbAttributes().length != 0) { - AttributeDisplayEvent.saveLastDisplayEvent(controller); - } else if (controller.getCurrentObjRelationships().length != 0 || controller.getCurrentDbRelationships().length != 0) { - RelationshipDisplayEvent.saveLastDisplayEvent(controller); - } else { - preferences.setEvent(EntityDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - - if (controller.getCurrentObjEntity() != null) { - preferences.setObjEntity(controller.getCurrentObjEntity().getName()); - preferences.setDbEntity(null); - } else if (controller.getCurrentDbEntity() != null) { - preferences.setDbEntity(controller.getCurrentDbEntity().getName()); - preferences.setObjEntity(null); - } - } - } - }, - - AttributeDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Entity entity = getLastEntity(dataMap); - if (entity == null) { - return; - } - - Attribute[] attributes = getLastEntityAttributes(entity); - - EntityDisplayEvent entityDisplayEvent = new EntityDisplayEvent(this, entity, dataMap, dataNode, dataChannel); - AttributeDisplayEvent attributeDisplayEvent = new AttributeDisplayEvent(this, attributes, entity, dataMap, dataChannel); - - if (entity instanceof ObjEntity) { - controller.fireObjEntityDisplayEvent(entityDisplayEvent); - controller.fireObjAttributeDisplayEvent(attributeDisplayEvent); - } else if (entity instanceof DbEntity) { - controller.fireDbEntityDisplayEvent(entityDisplayEvent); - controller.fireDbAttributeDisplayEvent(attributeDisplayEvent); - } - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(AttributeDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - - if (controller.getCurrentObjEntity() != null) { - preferences.setObjEntity(controller.getCurrentObjEntity().getName()); - preferences.setObjAttrs(parseToString(controller.getCurrentObjAttributes())); - preferences.setDbEntity(null); - } else if (controller.getCurrentDbEntity() != null) { - preferences.setDbEntity(controller.getCurrentDbEntity().getName()); - preferences.setDbAttrs(parseToString(controller.getCurrentDbAttributes())); - preferences.setObjEntity(null); - } - } - }, - - RelationshipDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Entity entity = getLastEntity(dataMap); - if (entity == null) { - return; - } - - Relationship[] relationships = getLastEntityRelationships(entity); - - EntityDisplayEvent entityDisplayEvent = new EntityDisplayEvent(this, entity, dataMap, dataNode, dataChannel); - RelationshipDisplayEvent displayEvent = new RelationshipDisplayEvent(this, relationships, entity, dataMap, dataChannel); - - if (entity instanceof ObjEntity) { - controller.fireObjEntityDisplayEvent(entityDisplayEvent); - controller.fireObjRelationshipDisplayEvent(displayEvent); - } else if (entity instanceof DbEntity) { - controller.fireDbEntityDisplayEvent(entityDisplayEvent); - controller.fireDbRelationshipDisplayEvent(displayEvent); - } - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(RelationshipDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - - if (controller.getCurrentObjEntity() != null) { - preferences.setObjEntity(controller.getCurrentObjEntity().getName()); - preferences.setObjRels(parseToString(controller.getCurrentObjRelationships())); - preferences.setDbEntity(null); - } else if (controller.getCurrentDbEntity() != null) { - preferences.setDbEntity(controller.getCurrentDbEntity().getName()); - preferences.setDbRels(parseToString(controller.getCurrentDbRelationships())); - preferences.setObjEntity(null); - } - } - }, - - EmbeddableDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Embeddable embeddable = dataMap.getEmbeddable(preferences.getEmbeddable()); - if (embeddable == null) { - return; - } - - EmbeddableDisplayEvent embeddableDisplayEvent = new EmbeddableDisplayEvent(this, embeddable, dataMap, dataChannel); - controller.fireEmbeddableDisplayEvent(embeddableDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - if (controller.getCurrentEmbAttributes().length != 0) { - EmbeddableAttributeDisplayEvent.saveLastDisplayEvent(controller); - } else { - preferences.setEvent(EmbeddableDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - preferences.setEmbeddable(controller.getCurrentEmbeddable().getClassName()); - } - } - }, - - EmbeddableAttributeDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Embeddable embeddable = dataMap.getEmbeddable(preferences.getEmbeddable()); - if (embeddable == null) { - return; - } - - EmbeddableDisplayEvent embeddableDisplayEvent = new EmbeddableDisplayEvent(this, embeddable, dataMap, dataChannel); - controller.fireEmbeddableDisplayEvent(embeddableDisplayEvent); - - EmbeddableAttribute[] embeddableAttributes = getLastEmbeddableAttributes(embeddable); - EmbeddableAttributeDisplayEvent attributeDisplayEvent = new EmbeddableAttributeDisplayEvent(this, embeddable, embeddableAttributes, dataMap, dataChannel); - controller.fireEmbeddableAttributeDisplayEvent(attributeDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(EmbeddableAttributeDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - preferences.setEmbeddable(controller.getCurrentEmbeddable().getClassName()); - - EmbeddableAttribute[] currentEmbAttributes = controller.getCurrentEmbAttributes(); - if (currentEmbAttributes == null) { - preferences.setEmbAttrs(""); - } else { - StringBuilder sb = new StringBuilder(); - for (EmbeddableAttribute embeddableAttribute : currentEmbAttributes) { - sb.append(embeddableAttribute.getName()).append(","); - } - preferences.setEmbAttrs(sb.toString()); - } - } - }, - - ProcedureDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Procedure procedure = dataMap.getProcedure(preferences.getProcedure()); - if (procedure == null) { - return; - } - - ProcedureDisplayEvent procedureDisplayEvent = new ProcedureDisplayEvent(this, procedure, dataMap, dataChannel); - controller.fireProcedureDisplayEvent(procedureDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - if (controller.getCurrentProcedureParameters().length != 0) { - ProcedureParameterDisplayEvent.saveLastDisplayEvent(controller); - } else { - preferences.setEvent(ProcedureDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - preferences.setProcedure(controller.getCurrentProcedure().getName()); - } - } - }, - - ProcedureParameterDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Procedure procedure = dataMap.getProcedure(preferences.getProcedure()); - if (procedure == null) { - return; - } - - ProcedureDisplayEvent procedureDisplayEvent = new ProcedureDisplayEvent(this, procedure, dataMap, dataChannel); - controller.fireProcedureDisplayEvent(procedureDisplayEvent); - - ProcedureParameter[] procedureParameters = getLastProcedureParameters(procedure); - ProcedureParameterDisplayEvent procedureParameterDisplayEvent = - new ProcedureParameterDisplayEvent(this, procedureParameters, procedure, dataMap, dataChannel); - controller.fireProcedureParameterDisplayEvent(procedureParameterDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(ProcedureParameterDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - preferences.setProcedure(controller.getCurrentProcedure().getName()); - preferences.setProcedureParams(parseToString(controller.getCurrentProcedureParameters())); - } - }, - - QueryDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - if (!dataChannel.getName().equals(preferences.getDomain())) { - return; - } - - DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); - if (dataMap == null) { - return; - } - - Query query = dataMap.getQuery(preferences.getQuery()); - if (query == null) { - return; - } - - QueryDisplayEvent queryDisplayEvent = new QueryDisplayEvent(this, query, dataMap, dataChannel); - controller.fireQueryDisplayEvent(queryDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(QueryDisplayEvent.toString()); - preferences.setDomain(controller.getCurrentDataChanel().getName()); - preferences.setDataMap(controller.getCurrentDataMap().getName()); - preferences.setQuery(controller.getCurrentQuery().getName()); - } - }, - - MultipleObjectsDisplayEvent { - @Override - void fireLastDisplayEvent(ProjectController controller) { - DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); - - String parentObjectName = preferences.getParentObject(); - ConfigurationNode parentObject; - ConfigurationNode[] multipleObjects; - - if (dataChannel.getDataMap(parentObjectName) != null) { - DataMap dataMap = dataChannel.getDataMap(parentObjectName); - parentObject = dataMap; - multipleObjects = getLastMultipleObjects(dataMap); - } else if (dataChannel.getNodeDescriptor(parentObjectName) != null) { - DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(parentObjectName); - parentObject = dataNode; - multipleObjects = getLastMultipleObjects(dataNode); - } else { - parentObject = dataChannel; - multipleObjects = getLastMultipleObjects(dataChannel); - } - - MultipleObjectsDisplayEvent multipleDisplayEvent = new MultipleObjectsDisplayEvent(this, multipleObjects, parentObject); - controller.fireMultipleObjectsDisplayEvent(multipleDisplayEvent); - } - - @Override - void saveLastDisplayEvent(ProjectController controller) { - preferences.setEvent(MultipleObjectsDisplayEvent.toString()); - preferences.setParentObject(getObjectName(controller.getCurrentParentPath())); - - Object[] multipleObjects = controller.getCurrentPaths(); - if (multipleObjects == null) { - preferences.setMultipleObjects(""); - } else { - StringBuilder sb = new StringBuilder(); - for (Object object : multipleObjects) { - String objectName = getObjectName(object); - if (!objectName.isEmpty()) { - sb.append(objectName).append(","); - } - } - preferences.setMultipleObjects(sb.toString()); - } - } - }; - - abstract void fireLastDisplayEvent(ProjectController controller); - - abstract void saveLastDisplayEvent(ProjectController controller); - } - - private static Entity getLastEntity(DataMap dataMap) { - return !preferences.getObjEntity().isEmpty() - ? dataMap.getObjEntity(preferences.getObjEntity()) - : dataMap.getDbEntity(preferences.getDbEntity()); - } - - private static Attribute[] getLastEntityAttributes(Entity entity) { - return (entity instanceof ObjEntity) - ? getLastObjEntityAttributes((ObjEntity) entity) - : getLastDbEntityAttributes((DbEntity) entity); - } - - private static Relationship[] getLastEntityRelationships(Entity entity) { - return (entity instanceof ObjEntity) - ? getLastObjEntityRelationships((ObjEntity) entity) - : getLastDbEntityRelationships((DbEntity) entity); - } - - private static ObjAttribute[] getLastObjEntityAttributes(ObjEntity objEntity) { - List<ObjAttribute> attributeList = new ArrayList<ObjAttribute>(); - ObjAttribute[] attributes = new ObjAttribute[0]; - - String objAttrs = preferences.getObjAttrs(); - if (!objAttrs.isEmpty()) { - String[] lastObjAttrs = objAttrs.split(","); - for (String objAttrName : lastObjAttrs) { - attributeList.add(objEntity.getAttribute(objAttrName)); - } - } - - return attributeList.toArray(attributes); - } - - private static DbAttribute[] getLastDbEntityAttributes(DbEntity dbEntity) { - List<DbAttribute> attributeList = new ArrayList<DbAttribute>(); - DbAttribute[] attributes = new DbAttribute[0]; - - String dbAttrs = preferences.getDbAttrs(); - if (!dbAttrs.isEmpty()) { - String[] lastDbAttrs = dbAttrs.split(","); - for (String dbAttrName : lastDbAttrs) { - attributeList.add(dbEntity.getAttribute(dbAttrName)); - } - } - - return attributeList.toArray(attributes); - } - - private static ObjRelationship[] getLastObjEntityRelationships(ObjEntity objEntity) { - List<ObjRelationship> relationshipList = new ArrayList<ObjRelationship>(); - ObjRelationship[] relationships = new ObjRelationship[0]; - - String objRels = preferences.getObjRels(); - if (!objRels.isEmpty()) { - String[] lastObjRels = objRels.split(","); - for (String objRelName : lastObjRels) { - relationshipList.add(objEntity.getRelationship(objRelName)); - } - } - - return relationshipList.toArray(relationships); - } - - private static DbRelationship[] getLastDbEntityRelationships(DbEntity dbEntity) { - List<DbRelationship> relationshipList = new ArrayList<DbRelationship>(); - DbRelationship[] relationships = new DbRelationship[0]; - - String dbRels = preferences.getDbRels(); - if (!dbRels.isEmpty()) { - String[] lastDbRels = dbRels.split(","); - for (String dbRelName : lastDbRels) { - relationshipList.add(dbEntity.getRelationship(dbRelName)); - } - } - - return relationshipList.toArray(relationships); - } - - private static EmbeddableAttribute[] getLastEmbeddableAttributes(Embeddable embeddable) { - List<EmbeddableAttribute> embeddableAttributeList = new ArrayList<EmbeddableAttribute>(); - EmbeddableAttribute[] attributes = new EmbeddableAttribute[0]; - - String embAttrs = preferences.getEmbAttrs(); - if (!embAttrs.isEmpty()) { - String[] lastEmbAttrs = embAttrs.split(","); - for (String embAttrName : lastEmbAttrs) { - embeddableAttributeList.add(embeddable.getAttribute(embAttrName)); - } - } - - return embeddableAttributeList.toArray(attributes); - } - - private static ProcedureParameter[] getLastProcedureParameters(Procedure procedure) { - List<ProcedureParameter> procedureParameterList = new ArrayList<ProcedureParameter>(); - ProcedureParameter[] parameters = new ProcedureParameter[0]; - - String procedureParams = preferences.getProcedureParams(); - if (!procedureParams.isEmpty()) { - String[] lastProcedureParams = procedureParams.split(","); - for (String procedureParamName : lastProcedureParams) { - for (ProcedureParameter procedureParameter : procedure.getCallParameters()) { - if (procedureParameter.getName().equals(procedureParamName)) { - procedureParameterList.add(procedureParameter); - } - } - } - } - - return procedureParameterList.toArray(parameters); - } - - private static ConfigurationNode[] getLastMultipleObjects(DataChannelDescriptor dataChannel) { - List<ConfigurationNode> configurationNodeList = new ArrayList<ConfigurationNode>(); - ConfigurationNode[] nodes = new ConfigurationNode[0]; - - String multipleObjects = preferences.getMultipleObjects(); - if (!multipleObjects.isEmpty()) { - String[] lastMultipleObjects = multipleObjects.split(","); - - outer: - for (String objectName : lastMultipleObjects) { - if (dataChannel.getName().equals(objectName)) { - configurationNodeList.add(dataChannel); - continue outer; - } - - for (DataNodeDescriptor dataNode : dataChannel.getNodeDescriptors()) { - if (dataNode.getName().equals(objectName)) { - configurationNodeList.add(dataNode); - continue outer; - } - } - - for (DataMap dataMap : dataChannel.getDataMaps()) { - if (dataMap.getName().equals(objectName)) { - configurationNodeList.add(dataMap); - continue outer; - } - } - } - } - - return configurationNodeList.toArray(nodes); - } - - private static ConfigurationNode[] getLastMultipleObjects(DataNodeDescriptor dataNode) { - List<ConfigurationNode> configurationNodeList = new ArrayList<ConfigurationNode>(); - ConfigurationNode[] nodes = new ConfigurationNode[0]; - - String multipleObjects = preferences.getMultipleObjects(); - if (!multipleObjects.isEmpty()) { - String[] lastMultipleObjects = multipleObjects.split(","); - for (String objectName : lastMultipleObjects) { - if (dataNode.getDataMapNames().contains(objectName)) { - configurationNodeList.add(dataNode.getDataChannelDescriptor().getDataMap(objectName)); - } - } - } - - return configurationNodeList.toArray(nodes); - } - - private static ConfigurationNode[] getLastMultipleObjects(DataMap dataMap) { - List<ConfigurationNode> configurationNodeList = new ArrayList<ConfigurationNode>(); - ConfigurationNode[] nodes = new ConfigurationNode[0]; - - String multipleObjects = preferences.getMultipleObjects(); - if (!multipleObjects.isEmpty()) { - String[] lastMultipleObjects = multipleObjects.split(","); - for (String objectName : lastMultipleObjects) { - if (dataMap.getObjEntity(objectName) != null) { - configurationNodeList.add(dataMap.getObjEntity(objectName)); - } else if (dataMap.getDbEntity(objectName) != null) { - configurationNodeList.add(dataMap.getDbEntity(objectName)); - } else if (dataMap.getEmbeddable(objectName) != null) { - configurationNodeList.add(dataMap.getEmbeddable(objectName)); - } else if (dataMap.getProcedure(objectName) != null) { - configurationNodeList.add(dataMap.getProcedure(objectName)); - } else if (dataMap.getQuery(objectName) != null) { - configurationNodeList.add(dataMap.getQuery(objectName)); - } - } - } - - return configurationNodeList.toArray(nodes); - } - - private static String getObjectName(Object object) { - if (object instanceof CayenneMapEntry) { - return ((CayenneMapEntry) object).getName(); - } else if (object instanceof DataChannelDescriptor) { - return ((DataChannelDescriptor) object).getName(); - } else if (object instanceof DataNodeDescriptor) { - return ((DataNodeDescriptor) object).getName(); - } else if (object instanceof DataMap) { - return ((DataMap) object).getName(); - } else if (object instanceof Embeddable) { - return ((Embeddable) object).getClassName(); - } else if (object instanceof Query) { - return ((Query) object).getName(); - } else { - return ""; - } - } - - private static String parseToString(CayenneMapEntry[] array) { - if (array == null) { - return ""; - } - - StringBuilder sb = new StringBuilder(); - for (CayenneMapEntry entry : array) { - sb.append(entry.getName()).append(","); - } - - return sb.toString(); - } - -} http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java new file mode 100644 index 0000000..4fb2659 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/AttributeDisplayEventType.java @@ -0,0 +1,107 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.map.Attribute; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.map.Entity; +import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.AttributeDisplayEvent; +import org.apache.cayenne.modeler.event.EntityDisplayEvent; + +import java.util.ArrayList; +import java.util.List; + +class AttributeDisplayEventType extends EntityDisplayEventType { + + public AttributeDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); + DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); + if (dataMap == null) { + return; + } + + Entity entity = getLastEntity(dataMap); + if (entity == null) { + return; + } + + Attribute[] attributes = getLastEntityAttributes(entity); + + EntityDisplayEvent entityDisplayEvent = new EntityDisplayEvent(this, entity, dataMap, dataNode, dataChannel); + AttributeDisplayEvent attributeDisplayEvent = new AttributeDisplayEvent(this, attributes, entity, dataMap, dataChannel); + + if (entity instanceof ObjEntity) { + controller.fireObjEntityDisplayEvent(entityDisplayEvent); + controller.fireObjAttributeDisplayEvent(attributeDisplayEvent); + } else if (entity instanceof DbEntity) { + controller.fireDbEntityDisplayEvent(entityDisplayEvent); + controller.fireDbAttributeDisplayEvent(attributeDisplayEvent); + } + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(AttributeDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); + preferences.setDataMap(controller.getCurrentDataMap().getName()); + + if (controller.getCurrentObjEntity() != null) { + preferences.setObjEntity(controller.getCurrentObjEntity().getName()); + preferences.setObjAttrs(parseToString(controller.getCurrentObjAttributes())); + preferences.setDbEntity(null); + } else if (controller.getCurrentDbEntity() != null) { + preferences.setDbEntity(controller.getCurrentDbEntity().getName()); + preferences.setDbAttrs(parseToString(controller.getCurrentDbAttributes())); + preferences.setObjEntity(null); + } + } + + protected Attribute[] getLastEntityAttributes(Entity entity) { + List<Attribute> attributeList = new ArrayList<Attribute>(); + Attribute[] attributes = new Attribute[0]; + + String attrs = (entity instanceof ObjEntity) + ? preferences.getObjAttrs() + : preferences.getDbAttrs(); + + for (String attrName : attrs.split(",")) { + attributeList.add(entity.getAttribute(attrName)); + } + + return attributeList.toArray(attributes); + } + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java new file mode 100644 index 0000000..66ae7aa --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataMapDisplayEventType.java @@ -0,0 +1,58 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.DataMapDisplayEvent; + +class DataMapDisplayEventType extends DisplayEventType { + + public DataMapDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); + DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); + if (dataMap == null) { + return; + } + + DataMapDisplayEvent dataMapDisplayEvent = new DataMapDisplayEvent(this, dataMap, dataChannel, dataNode); + controller.fireDataMapDisplayEvent(dataMapDisplayEvent); + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(DataMapDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); + preferences.setDataMap(controller.getCurrentDataMap().getName()); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java new file mode 100644 index 0000000..5593a77 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DataNodeDisplayEventType.java @@ -0,0 +1,55 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.DataNodeDisplayEvent; + +class DataNodeDisplayEventType extends DisplayEventType { + + public DataNodeDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); + if (dataNode == null) { + return; + } + + DataNodeDisplayEvent dataNodeDisplayEvent = new DataNodeDisplayEvent(this, dataChannel, dataNode); + controller.fireDataNodeDisplayEvent(dataNodeDisplayEvent); + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(DataNodeDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + preferences.setNode(controller.getCurrentDataNode().getName()); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventType.java new file mode 100644 index 0000000..73ba690 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventType.java @@ -0,0 +1,76 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.Embeddable; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.pref.ProjectStatePreferences; +import org.apache.cayenne.query.Query; +import org.apache.cayenne.util.CayenneMapEntry; + +public abstract class DisplayEventType { + + protected ProjectController controller; + protected ProjectStatePreferences preferences; + + public DisplayEventType(ProjectController controller) { + this.controller = controller; + this.preferences = controller.getProjectStatePreferences(); + } + + public abstract void fireLastDisplayEvent(); + + public abstract void saveLastDisplayEvent(); + + protected String getObjectName(Object object) { + if (object instanceof CayenneMapEntry) { + return ((CayenneMapEntry) object).getName(); + } else if (object instanceof DataChannelDescriptor) { + return ((DataChannelDescriptor) object).getName(); + } else if (object instanceof DataNodeDescriptor) { + return ((DataNodeDescriptor) object).getName(); + } else if (object instanceof DataMap) { + return ((DataMap) object).getName(); + } else if (object instanceof Embeddable) { + return ((Embeddable) object).getClassName(); + } else if (object instanceof Query) { + return ((Query) object).getName(); + } else { + return ""; + } + } + + protected String parseToString(CayenneMapEntry[] array) { + if (array == null) { + return ""; + } + + StringBuilder sb = new StringBuilder(); + for (CayenneMapEntry entry : array) { + sb.append(entry.getName()).append(","); + } + + return sb.toString(); + } + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java new file mode 100644 index 0000000..44bac2c --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DisplayEventTypes.java @@ -0,0 +1,198 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.AttributeDisplayEvent; +import org.apache.cayenne.modeler.event.DataMapDisplayEvent; +import org.apache.cayenne.modeler.event.DataNodeDisplayEvent; +import org.apache.cayenne.modeler.event.DomainDisplayEvent; +import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent; +import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent; +import org.apache.cayenne.modeler.event.EntityDisplayEvent; +import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent; +import org.apache.cayenne.modeler.event.ProcedureDisplayEvent; +import org.apache.cayenne.modeler.event.ProcedureParameterDisplayEvent; +import org.apache.cayenne.modeler.event.QueryDisplayEvent; +import org.apache.cayenne.modeler.event.RelationshipDisplayEvent; + +public enum DisplayEventTypes { + + DomainDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new DomainDisplayEventType(controller); + } + + @Override + public String toString() { + return DomainDisplayEvent.class.getSimpleName(); + } + }, + + DataNodeDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new DataNodeDisplayEventType(controller); + } + + @Override + public String toString() { + return DataNodeDisplayEvent.class.getSimpleName(); + } + }, + + DataMapDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new DataMapDisplayEventType(controller); + } + + @Override + public String toString() { + return DataMapDisplayEvent.class.getSimpleName(); + } + }, + + EntityDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + if (controller.getCurrentObjAttributes().length != 0 || controller.getCurrentDbAttributes().length != 0) { + return new AttributeDisplayEventType(controller); + } else if (controller.getCurrentObjRelationships().length != 0 || controller.getCurrentDbRelationships().length != 0) { + return new RelationshipDisplayEventType(controller); + } else { + return new EntityDisplayEventType(controller); + } + } + + @Override + public String toString() { + return EntityDisplayEvent.class.getSimpleName(); + } + }, + + AttributeDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new AttributeDisplayEventType(controller); + } + + @Override + public String toString() { + return AttributeDisplayEvent.class.getSimpleName(); + } + }, + + RelationshipDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new RelationshipDisplayEventType(controller); + } + + @Override + public String toString() { + return RelationshipDisplayEvent.class.getSimpleName(); + } + }, + + EmbeddableDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + if (controller.getCurrentEmbAttributes().length != 0) { + return new EmbeddableAttributeDisplayEventType(controller); + } else { + return new EmbeddableDisplayEventType(controller); + } + } + + @Override + public String toString() { + return EmbeddableDisplayEvent.class.getSimpleName(); + } + }, + + EmbeddableAttributeDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new EmbeddableAttributeDisplayEventType(controller); + } + + @Override + public String toString() { + return EmbeddableAttributeDisplayEvent.class.getSimpleName(); + } + }, + + ProcedureDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + if (controller.getCurrentProcedureParameters().length != 0) { + return new ProcedureParameterDisplayEventType(controller); + } else { + return new ProcedureDisplayEventType(controller); + } + } + + @Override + public String toString() { + return ProcedureDisplayEvent.class.getSimpleName(); + } + }, + + ProcedureParameterDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new ProcedureParameterDisplayEventType(controller); + } + + @Override + public String toString() { + return ProcedureParameterDisplayEvent.class.getSimpleName(); + } + }, + + QueryDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new QueryDisplayEventType(controller); + } + + @Override + public String toString() { + return QueryDisplayEvent.class.getSimpleName(); + } + }, + + MultipleObjectsDisplayEvent { + @Override + DisplayEventType createDisplayEventType(ProjectController controller) { + return new MultipleObjectsDisplayEventType(controller); + } + + @Override + public String toString() { + return MultipleObjectsDisplayEvent.class.getSimpleName(); + } + }; + + abstract DisplayEventType createDisplayEventType(ProjectController controller); + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java new file mode 100644 index 0000000..293422f --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/DomainDisplayEventType.java @@ -0,0 +1,49 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.DomainDisplayEvent; + +class DomainDisplayEventType extends DisplayEventType { + + public DomainDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DomainDisplayEvent domainDisplayEvent = new DomainDisplayEvent(this, dataChannel); + controller.fireDomainDisplayEvent(domainDisplayEvent); + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(DomainDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + } + +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java new file mode 100644 index 0000000..568e467 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableAttributeDisplayEventType.java @@ -0,0 +1,98 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.Embeddable; +import org.apache.cayenne.map.EmbeddableAttribute; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent; +import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent; + +import java.util.ArrayList; +import java.util.List; + +class EmbeddableAttributeDisplayEventType extends EmbeddableDisplayEventType { + + public EmbeddableAttributeDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); + if (dataMap == null) { + return; + } + + Embeddable embeddable = dataMap.getEmbeddable(preferences.getEmbeddable()); + if (embeddable == null) { + return; + } + + EmbeddableDisplayEvent embeddableDisplayEvent = new EmbeddableDisplayEvent(this, embeddable, dataMap, dataChannel); + controller.fireEmbeddableDisplayEvent(embeddableDisplayEvent); + + EmbeddableAttribute[] embeddableAttributes = getLastEmbeddableAttributes(embeddable); + EmbeddableAttributeDisplayEvent attributeDisplayEvent = new EmbeddableAttributeDisplayEvent(this, embeddable, embeddableAttributes, dataMap, dataChannel); + controller.fireEmbeddableAttributeDisplayEvent(attributeDisplayEvent); + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(EmbeddableAttributeDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + preferences.setDataMap(controller.getCurrentDataMap().getName()); + preferences.setEmbeddable(controller.getCurrentEmbeddable().getClassName()); + + EmbeddableAttribute[] currentEmbAttributes = controller.getCurrentEmbAttributes(); + if (currentEmbAttributes == null) { + preferences.setEmbAttrs(""); + } else { + StringBuilder sb = new StringBuilder(); + for (EmbeddableAttribute embeddableAttribute : currentEmbAttributes) { + sb.append(embeddableAttribute.getName()).append(","); + } + preferences.setEmbAttrs(sb.toString()); + } + } + + protected EmbeddableAttribute[] getLastEmbeddableAttributes(Embeddable embeddable) { + List<EmbeddableAttribute> embeddableAttributeList = new ArrayList<EmbeddableAttribute>(); + EmbeddableAttribute[] attributes = new EmbeddableAttribute[0]; + + String embAttrs = preferences.getEmbAttrs(); + if (embAttrs.isEmpty()) { + return embeddableAttributeList.toArray(attributes); + } + + for (String embAttrName : embAttrs.split(",")) { + embeddableAttributeList.add(embeddable.getAttribute(embAttrName)); + } + + return embeddableAttributeList.toArray(attributes); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java new file mode 100644 index 0000000..a815972 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EmbeddableDisplayEventType.java @@ -0,0 +1,62 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.Embeddable; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent; + +class EmbeddableDisplayEventType extends DisplayEventType { + + public EmbeddableDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); + if (dataMap == null) { + return; + } + + Embeddable embeddable = dataMap.getEmbeddable(preferences.getEmbeddable()); + if (embeddable == null) { + return; + } + + EmbeddableDisplayEvent embeddableDisplayEvent = new EmbeddableDisplayEvent(this, embeddable, dataMap, dataChannel); + controller.fireEmbeddableDisplayEvent(embeddableDisplayEvent); + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(EmbeddableDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + preferences.setDataMap(controller.getCurrentDataMap().getName()); + preferences.setEmbeddable(controller.getCurrentEmbeddable().getClassName()); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java new file mode 100644 index 0000000..1559fa1 --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/EntityDisplayEventType.java @@ -0,0 +1,84 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.map.DbEntity; +import org.apache.cayenne.map.Entity; +import org.apache.cayenne.map.ObjEntity; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.EntityDisplayEvent; + +class EntityDisplayEventType extends DisplayEventType { + + public EntityDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + if (!dataChannel.getName().equals(preferences.getDomain())) { + return; + } + + DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(preferences.getNode()); + DataMap dataMap = dataChannel.getDataMap(preferences.getDataMap()); + if (dataMap == null) { + return; + } + + Entity entity = getLastEntity(dataMap); + if (entity == null) { + return; + } + + EntityDisplayEvent entityDisplayEvent = new EntityDisplayEvent(this, entity, dataMap, dataNode, dataChannel); + if (entity instanceof ObjEntity) { + controller.fireObjEntityDisplayEvent(entityDisplayEvent); + } else if (entity instanceof DbEntity) { + controller.fireDbEntityDisplayEvent(entityDisplayEvent); + } + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(EntityDisplayEvent.class.getSimpleName()); + preferences.setDomain(controller.getCurrentDataChanel().getName()); + preferences.setNode(controller.getCurrentDataNode() != null ? controller.getCurrentDataNode().getName() : ""); + preferences.setDataMap(controller.getCurrentDataMap().getName()); + + if (controller.getCurrentObjEntity() != null) { + preferences.setObjEntity(controller.getCurrentObjEntity().getName()); + preferences.setDbEntity(null); + } else if (controller.getCurrentDbEntity() != null) { + preferences.setDbEntity(controller.getCurrentDbEntity().getName()); + preferences.setObjEntity(null); + } + } + + protected Entity getLastEntity(DataMap dataMap) { + return !preferences.getObjEntity().isEmpty() + ? dataMap.getObjEntity(preferences.getObjEntity()) + : dataMap.getDbEntity(preferences.getDbEntity()); + } +} http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java new file mode 100644 index 0000000..bc7251e --- /dev/null +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/MultipleObjectsDisplayEventType.java @@ -0,0 +1,166 @@ +/***************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + ****************************************************************/ + +package org.apache.cayenne.modeler.util.state; + +import org.apache.cayenne.configuration.ConfigurationNode; +import org.apache.cayenne.configuration.DataChannelDescriptor; +import org.apache.cayenne.configuration.DataNodeDescriptor; +import org.apache.cayenne.map.DataMap; +import org.apache.cayenne.modeler.ProjectController; +import org.apache.cayenne.modeler.event.MultipleObjectsDisplayEvent; + +import java.util.ArrayList; +import java.util.List; + +class MultipleObjectsDisplayEventType extends DisplayEventType { + + public MultipleObjectsDisplayEventType(ProjectController controller) { + super(controller); + } + + @Override + public void fireLastDisplayEvent() { + DataChannelDescriptor dataChannel = (DataChannelDescriptor) controller.getProject().getRootNode(); + + String parentObjectName = preferences.getParentObject(); + ConfigurationNode parentObject; + ConfigurationNode[] multipleObjects; + + if (dataChannel.getDataMap(parentObjectName) != null) { + DataMap dataMap = dataChannel.getDataMap(parentObjectName); + parentObject = dataMap; + multipleObjects = getLastMultipleObjects(dataMap); + } else if (dataChannel.getNodeDescriptor(parentObjectName) != null) { + DataNodeDescriptor dataNode = dataChannel.getNodeDescriptor(parentObjectName); + parentObject = dataNode; + multipleObjects = getLastMultipleObjects(dataNode); + } else { + parentObject = dataChannel; + multipleObjects = getLastMultipleObjects(dataChannel); + } + + MultipleObjectsDisplayEvent multipleDisplayEvent = new MultipleObjectsDisplayEvent(this, multipleObjects, parentObject); + controller.fireMultipleObjectsDisplayEvent(multipleDisplayEvent); + } + + @Override + public void saveLastDisplayEvent() { + preferences.setEvent(MultipleObjectsDisplayEvent.class.getSimpleName()); + preferences.setParentObject(getObjectName(controller.getCurrentParentPath())); + + Object[] multipleObjects = controller.getCurrentPaths(); + if (multipleObjects == null) { + preferences.setMultipleObjects(""); + } else { + StringBuilder sb = new StringBuilder(); + for (Object object : multipleObjects) { + String objectName = getObjectName(object); + if (!objectName.isEmpty()) { + sb.append(objectName).append(","); + } + } + preferences.setMultipleObjects(sb.toString()); + } + } + + protected ConfigurationNode[] getLastMultipleObjects(DataChannelDescriptor dataChannel) { + List<ConfigurationNode> configurationNodeList = new ArrayList<ConfigurationNode>(); + ConfigurationNode[] nodes = new ConfigurationNode[0]; + + String multipleObjects = preferences.getMultipleObjects(); + if (multipleObjects.isEmpty()) { + return configurationNodeList.toArray(nodes); + } + + for (String objectName : multipleObjects.split(",")) { + ConfigurationNode configNode = getConfigNode(dataChannel, objectName); + if (configNode != null) { + configurationNodeList.add(configNode); + } + } + + return configurationNodeList.toArray(nodes); + } + + protected ConfigurationNode[] getLastMultipleObjects(DataNodeDescriptor dataNode) { + List<ConfigurationNode> configurationNodeList = new ArrayList<ConfigurationNode>(); + ConfigurationNode[] nodes = new ConfigurationNode[0]; + + String multipleObjects = preferences.getMultipleObjects(); + if (multipleObjects.isEmpty()) { + return configurationNodeList.toArray(nodes); + } + + for (String objectName : multipleObjects.split(",")) { + if (dataNode.getDataMapNames().contains(objectName)) { + configurationNodeList.add(dataNode.getDataChannelDescriptor().getDataMap(objectName)); + } + } + + return configurationNodeList.toArray(nodes); + } + + protected ConfigurationNode[] getLastMultipleObjects(DataMap dataMap) { + List<ConfigurationNode> configurationNodeList = new ArrayList<ConfigurationNode>(); + ConfigurationNode[] nodes = new ConfigurationNode[0]; + + String multipleObjects = preferences.getMultipleObjects(); + if (multipleObjects.isEmpty()) { + return configurationNodeList.toArray(nodes); + } + + for (String objectName : multipleObjects.split(",")) { + if (dataMap.getObjEntity(objectName) != null) { + configurationNodeList.add(dataMap.getObjEntity(objectName)); + } else if (dataMap.getDbEntity(objectName) != null) { + configurationNodeList.add(dataMap.getDbEntity(objectName)); + } else if (dataMap.getEmbeddable(objectName) != null) { + configurationNodeList.add(dataMap.getEmbeddable(objectName)); + } else if (dataMap.getProcedure(objectName) != null) { + configurationNodeList.add(dataMap.getProcedure(objectName)); + } else if (dataMap.getQuery(objectName) != null) { + configurationNodeList.add(dataMap.getQuery(objectName)); + } + } + + return configurationNodeList.toArray(nodes); + } + + private ConfigurationNode getConfigNode(DataChannelDescriptor dataChannel, String objectName) { + if (dataChannel.getName().equals(objectName)) { + return dataChannel; + } + + for (DataNodeDescriptor dataNode : dataChannel.getNodeDescriptors()) { + if (dataNode.getName().equals(objectName)) { + return dataNode; + } + } + + for (DataMap dataMap : dataChannel.getDataMaps()) { + if (dataMap.getName().equals(objectName)) { + return dataMap; + } + } + + return null; + } + +} \ No newline at end of file