You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2015/04/17 13:28:26 UTC

[2/3] cayenne git commit: CAY-2001 | Saving a display state of Project

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java
new file mode 100644
index 0000000..7bf2014
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureDisplayEventType.java
@@ -0,0 +1,63 @@
+/*****************************************************************
+ *   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.Procedure;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
+
+class ProcedureDisplayEventType extends DisplayEventType {
+
+    public ProcedureDisplayEventType(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;
+        }
+
+        Procedure procedure = dataMap.getProcedure(preferences.getProcedure());
+        if (procedure == null) {
+            return;
+        }
+
+        ProcedureDisplayEvent procedureDisplayEvent = new ProcedureDisplayEvent(this, procedure, dataMap, dataChannel);
+        controller.fireProcedureDisplayEvent(procedureDisplayEvent);
+    }
+
+    @Override
+    public void saveLastDisplayEvent() {
+        preferences.setEvent(ProcedureDisplayEvent.class.getSimpleName());
+        preferences.setDomain(controller.getCurrentDataChanel().getName());
+        preferences.setDataMap(controller.getCurrentDataMap().getName());
+        preferences.setProcedure(controller.getCurrentProcedure().getName());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java
new file mode 100644
index 0000000..244508f
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProcedureParameterDisplayEventType.java
@@ -0,0 +1,93 @@
+/*****************************************************************
+ *   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.Procedure;
+import org.apache.cayenne.map.ProcedureParameter;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.ProcedureDisplayEvent;
+import org.apache.cayenne.modeler.event.ProcedureParameterDisplayEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class ProcedureParameterDisplayEventType extends ProcedureDisplayEventType {
+
+    public ProcedureParameterDisplayEventType(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;
+        }
+
+        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
+    public void saveLastDisplayEvent() {
+        preferences.setEvent(ProcedureParameterDisplayEvent.class.getSimpleName());
+        preferences.setDomain(controller.getCurrentDataChanel().getName());
+        preferences.setDataMap(controller.getCurrentDataMap().getName());
+        preferences.setProcedure(controller.getCurrentProcedure().getName());
+        preferences.setProcedureParams(parseToString(controller.getCurrentProcedureParameters()));
+    }
+
+    protected ProcedureParameter[] getLastProcedureParameters(Procedure procedure) {
+        List<ProcedureParameter> procedureParameterList = new ArrayList<ProcedureParameter>();
+        ProcedureParameter[] parameters = new ProcedureParameter[0];
+
+        String procedureParams = preferences.getProcedureParams();
+        if (procedureParams.isEmpty()) {
+            return procedureParameterList.toArray(parameters);
+        }
+
+        for (String procedureParamName : procedureParams.split(",")) {
+            for (ProcedureParameter procedureParameter : procedure.getCallParameters()) {
+                if (procedureParameter.getName().equals(procedureParamName)) {
+                    procedureParameterList.add(procedureParameter);
+                }
+            }
+        }
+
+        return procedureParameterList.toArray(parameters);
+    }
+}
\ 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/ProjectStateUtil.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProjectStateUtil.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProjectStateUtil.java
new file mode 100644
index 0000000..c077863
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/ProjectStateUtil.java
@@ -0,0 +1,72 @@
+/*****************************************************************
+ *   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.pref.ProjectStatePreferences;
+
+import java.util.EventObject;
+import java.util.prefs.BackingStoreException;
+
+public final class ProjectStateUtil {
+
+    public ProjectStateUtil() {
+    }
+
+    public void saveLastState(ProjectController controller) {
+        EventObject displayEvent = controller.getLastDisplayEvent();
+        Object[] multiplyObjects = controller.getCurrentPaths();
+
+        if (displayEvent == null && multiplyObjects == null) {
+            return;
+        }
+
+        ProjectStatePreferences preferences = controller.getProjectStatePreferences();
+        if (preferences.getCurrentPreference() == null) {
+            return;
+        }
+
+        try {
+            preferences.getCurrentPreference().clear();
+        } catch (BackingStoreException e) {
+            // ignore exception
+        }
+
+        if (displayEvent != null) {
+            DisplayEventTypes.valueOf(displayEvent.getClass().getSimpleName())
+                    .createDisplayEventType(controller)
+                    .saveLastDisplayEvent();
+        } else if (multiplyObjects.length != 0) {
+            new MultipleObjectsDisplayEventType(controller).saveLastDisplayEvent();
+        }
+    }
+
+    public void fireLastState(ProjectController controller) {
+        ProjectStatePreferences preferences = controller.getProjectStatePreferences();
+
+        String displayEventName = preferences.getEvent();
+        if (!displayEventName.isEmpty()) {
+            DisplayEventTypes.valueOf(displayEventName)
+                    .createDisplayEventType(controller)
+                    .fireLastDisplayEvent();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.java
new file mode 100644
index 0000000..e9b5817
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/QueryDisplayEventType.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.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.QueryDisplayEvent;
+import org.apache.cayenne.query.Query;
+
+class QueryDisplayEventType extends DisplayEventType {
+
+    public QueryDisplayEventType(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;
+        }
+
+        Query query = dataMap.getQuery(preferences.getQuery());
+        if (query == null) {
+            return;
+        }
+
+        QueryDisplayEvent queryDisplayEvent = new QueryDisplayEvent(this, query, dataMap, dataChannel);
+        controller.fireQueryDisplayEvent(queryDisplayEvent);
+    }
+
+    @Override
+    public void saveLastDisplayEvent() {
+        preferences.setEvent(QueryDisplayEvent.class.getSimpleName());
+        preferences.setDomain(controller.getCurrentDataChanel().getName());
+        preferences.setDataMap(controller.getCurrentDataMap().getName());
+        preferences.setQuery(controller.getCurrentQuery().getName());
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/1f514c4b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.java
new file mode 100644
index 0000000..854fe3a
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/state/RelationshipDisplayEventType.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.DataMap;
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.Relationship;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+class RelationshipDisplayEventType extends EntityDisplayEventType {
+
+    public RelationshipDisplayEventType(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;
+        }
+
+        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
+    public void saveLastDisplayEvent() {
+        preferences.setEvent(RelationshipDisplayEvent.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.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);
+        }
+    }
+
+    protected Relationship[] getLastEntityRelationships(Entity entity) {
+        List<Relationship> relationshipList = new ArrayList<Relationship>();
+        Relationship[] relationships = new Relationship[0];
+
+        String rels = (entity instanceof ObjEntity)
+                ? preferences.getObjRels()
+                : preferences.getDbRels();
+
+        for (String objRelName : rels.split(",")) {
+            relationshipList.add(entity.getRelationship(objRelName));
+        }
+
+        return relationshipList.toArray(relationships);
+    }
+
+}