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);
+ }
+
+}