cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From and...@apache.org
Subject svn commit: r886158 [2/2] - in /cayenne/main/trunk/framework: cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/map/ cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/map/ cayenne-modeler/ cayenne-modeler/src/main/java/org/apache/ca...
Date Wed, 02 Dec 2009 14:37:45 GMT
Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphLoader.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphLoader.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphLoader.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphLoader.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,114 @@
+/*****************************************************************
+ *   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.graph;
+
+import java.awt.geom.Rectangle2D;
+import java.util.Hashtable;
+import java.util.Map;
+
+import javax.swing.undo.UndoableEdit;
+
+import org.apache.cayenne.util.Util;
+import org.jgraph.graph.DefaultGraphCell;
+import org.jgraph.graph.GraphConstants;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * Class to load graph from XML
+ */
+public class GraphLoader extends DefaultHandler {
+    static final String GRAPH_TAG = "graph";
+    
+    static final String ENTITY_TAG = "entity";
+    
+    /**
+     * Map graphs will be loaded into
+     */
+    GraphMap map;
+    
+    /**
+     * Current builder
+     */
+    GraphBuilder builder;
+    
+    /**
+     * Changed properties for every builder
+     */
+    Map<DefaultGraphCell, Map<String, ?>> propertiesMap;
+            
+    public GraphLoader(GraphMap map) {
+        this.map = map;
+    }
+    
+    @Override
+    public void startElement(
+            String uri,
+            String localName,
+            String qName,
+            Attributes attributes) throws SAXException {
+        if (GRAPH_TAG.equalsIgnoreCase(localName)) {
+            String type = attributes.getValue("", "type");
+            if (Util.isEmptyString(type)) {
+                throw new SAXException("Graph type not specified");
+            }
+            
+            GraphType graphType = GraphType.valueOf(type);
+            if (graphType == null) {
+                throw new SAXException("Graph type " + type + " not supported");
+            }
+            
+            builder = map.createGraphBuilder(graphType, false);
+            builder.getGraph().setScale(getAsDouble(attributes, "scale"));
+            
+            propertiesMap = new Hashtable<DefaultGraphCell, Map<String,?>>();
+        }
+        else if (ENTITY_TAG.equalsIgnoreCase(localName)) {
+            String name = attributes.getValue("", "name");
+            DefaultGraphCell cell = builder.getEntityCell(name);
+            if (cell != null) {
+                Map<String, Object> props = new Hashtable<String, Object>();
+                GraphConstants.setBounds(props, 
+                        new Rectangle2D.Double(
+                            getAsDouble(attributes, "x"),
+                            getAsDouble(attributes, "y"),
+                            getAsDouble(attributes, "width"),
+                            getAsDouble(attributes, "height")
+                        ));
+                propertiesMap.put(cell, props);
+            }
+        }
+    }
+    
+    @Override
+    public void endElement(String uri, String localName, String qName)
+            throws SAXException {
+        if (GRAPH_TAG.equalsIgnoreCase(localName)) {
+            //apply changes
+            builder.getGraph().getGraphLayoutCache().getModel().removeUndoableEditListener(builder);
+            builder.getGraph().getGraphLayoutCache().edit(propertiesMap, null, null, new UndoableEdit[0]);
+            builder.getGraph().getGraphLayoutCache().getModel().addUndoableEditListener(builder);
+        }
+    }
+    
+    private double getAsDouble(Attributes atts, String key) {
+        return Double.valueOf(atts.getValue("", key));
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphMap.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphMap.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphMap.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphMap.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,103 @@
+/*****************************************************************
+ *   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.graph;
+
+import java.util.HashMap;
+
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.util.XMLEncoder;
+import org.apache.cayenne.util.XMLSerializable;
+
+/**
+ * Map that stores graph builders <b>for a single domain</b> by their type 
+ * and has additional methods to set currently selected graph and serialize to XML
+ */
+public class GraphMap extends HashMap<GraphType, GraphBuilder> implements XMLSerializable {
+    /**
+     * type that is currently selected
+     */
+    GraphType selectedType;
+    
+    /**
+     * Domain
+     */
+    DataDomain domain;
+    
+    public GraphMap(DataDomain domain) {
+        this.domain = domain;
+    }
+     
+    /**
+     * Returns domain
+     */
+    public DataDomain getDomain() {
+        return domain;
+    }
+    
+    /**
+     * Returns type that is currently selected
+     */
+    public GraphType getSelectedType() {
+        return selectedType;
+    }
+    
+    /**
+     * Sets type that is currently selected
+     */
+    public void setSelectedType(GraphType selectedType) {
+        this.selectedType = selectedType;
+    }
+
+    public void encodeAsXML(XMLEncoder encoder) {
+        encoder.print("<graphs");
+//        if (selectedType != null) {
+//            encoder.print(" selected=\"" + selectedType + "\"");
+//        }
+        encoder.println(">");
+        encoder.indent(1);
+        
+        for (GraphBuilder builder : values()) {
+            builder.encodeAsXML(encoder);
+        }
+        
+        encoder.indent(-1);
+        encoder.println("</graphs>");
+    }
+    
+    public GraphBuilder createGraphBuilder(GraphType type, boolean doLayout) {
+        try {
+            GraphBuilder builder = type.getBuilderClass().newInstance();
+            builder.buildGraph(getProjectController(), domain, doLayout);
+            put(type, builder);
+            
+            return builder;
+        }
+        catch (Exception e) {
+            throw new CayenneRuntimeException("Could not instantiate GraphBuilder", e);
+        }
+    }
+    
+    //TODO do not use static context
+    private ProjectController getProjectController() {
+        return Application.getInstance().getFrameController().getProjectController();
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphRegistry.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphRegistry.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphRegistry.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphRegistry.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,111 @@
+/*****************************************************************
+ *   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.graph;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.map.event.DomainEvent;
+import org.apache.cayenne.map.event.DomainListener;
+import org.apache.cayenne.modeler.ProjectController;
+import org.jgraph.JGraph;
+
+/**
+ * Class for storing information about datadomain's builders.
+ * Has methods for saving and loading graphs, as well as building graph for
+ * specified data domain.
+ * This class is center of all graph management in CM
+ */
+public class GraphRegistry implements DomainListener {
+
+    /**
+     * Main storage of graph builders
+     */
+    Map<DataDomain, GraphMap> graphMaps;
+
+    public GraphRegistry() {
+        graphMaps = new HashMap<DataDomain, GraphMap>();
+    }
+
+    /**
+     * Builds graph with specified type, or returns existing one
+     */
+    public JGraph loadGraph(ProjectController mediator, DataDomain domain, GraphType type) {
+        GraphMap graphMap = graphMaps.get(domain);
+        if (graphMap == null) {
+            graphMap = new GraphMap(domain);
+            graphMaps.put(domain, graphMap);
+        }
+
+        GraphBuilder builder = graphMap.get(type);
+        if (builder == null) {
+            builder = graphMap.createGraphBuilder(type, true);
+            
+            mediator.setDirty(true);
+        }
+        
+        //marking this builder as default
+        graphMap.setSelectedType(builder.getType());
+
+        return builder.getGraph();
+    }
+    
+    /**
+     * Gets graph map for specified domain, creating it if needed
+     */
+    public GraphMap getGraphMap(DataDomain domain) {
+        GraphMap map = graphMaps.get(domain);
+        if (map == null) {
+            map = new GraphMap(domain);
+            graphMaps.put(domain, map);
+        }
+        return map;
+    }
+
+    public void domainAdded(DomainEvent e) {
+    }
+
+    public void domainChanged(DomainEvent e) {
+    }
+
+    public void domainRemoved(DomainEvent e) {
+        unregisterDomain(e.getDomain());
+    }
+    
+    void unregisterDomain(DataDomain domain) {
+        GraphMap map = graphMaps.get(domain);
+        if (map != null) {
+            for (GraphBuilder builder : map.values()) {
+                builder.destroy();
+            }
+            graphMaps.remove(domain);
+        }
+    }
+    
+    /**
+     * Removes all listeners (and itself) from ProjectController
+     */
+    public void unregister(ProjectController mediator) {
+        for (DataDomain domain : mediator.getProject().getConfiguration().getDomains()) {
+            unregisterDomain(domain);
+        }
+        mediator.removeDomainListener(this);
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphType.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphType.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphType.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/GraphType.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,57 @@
+/*****************************************************************
+ *   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.graph;
+
+/**
+ * Types of the graph
+ */
+public enum GraphType {
+    /**
+     * ER-diagram (with DbEntities)
+     */
+    ER("ER Diagram", DbGraphBuilder.class),
+    
+    /**
+     * Obj-Diagram (with ObjEntities)
+     */
+    CLASS("Class Diagram", ObjGraphBuilder.class);
+    
+    /**
+     * Class to build graphs with
+     */
+    Class<? extends GraphBuilder> builderClass;
+    
+    /**
+     * Readable name
+     */
+    String name;
+    
+    private GraphType(String name, Class builderClass) {
+        this.builderClass = builderClass;
+        this.name = name;
+    }
+    
+    public Class<? extends GraphBuilder> getBuilderClass() {
+        return builderClass;
+    }
+    
+    public String getName() {
+        return name;
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjEntityCellMetadata.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,42 @@
+/*****************************************************************
+ *   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.graph;
+
+import org.apache.cayenne.map.Attribute;
+import org.apache.cayenne.map.Entity;
+
+/**
+ * Descriptor of ObjEntity Cell
+ */
+class ObjEntityCellMetadata extends EntityCellMetadata {
+    ObjEntityCellMetadata(GraphBuilder builder, String entityName) {
+        super(builder, entityName);
+    }
+    
+    @Override
+    public Entity fetchEntity() {
+        return builder.getDataDomain().getEntityResolver().getObjEntity(entityName);
+    }
+
+    @Override
+    protected boolean isPrimary(Attribute attr) {
+        return false;
+    }
+
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/ObjGraphBuilder.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,213 @@
+/*****************************************************************
+ *   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.graph;
+
+import java.awt.Color;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.cayenne.access.DataDomain;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.event.AttributeEvent;
+import org.apache.cayenne.map.event.EntityEvent;
+import org.apache.cayenne.map.event.ObjAttributeListener;
+import org.apache.cayenne.map.event.ObjEntityListener;
+import org.apache.cayenne.map.event.ObjRelationshipListener;
+import org.apache.cayenne.map.event.RelationshipEvent;
+import org.apache.cayenne.modeler.ProjectController;
+import org.jgraph.graph.DefaultEdge;
+import org.jgraph.graph.DefaultGraphCell;
+import org.jgraph.graph.GraphConstants;
+
+/**
+ * Builder of ObjEntity information-based graph (relative to UML class diagram)
+ */
+class ObjGraphBuilder extends BaseGraphBuilder
+    implements ObjEntityListener, ObjAttributeListener, ObjRelationshipListener {
+    
+    static final Color ENTITY_COLOR = new Color(255, 255, 185);
+    
+    Map<Entity, DefaultEdge> inheritanceEdges;
+    
+    public ObjGraphBuilder() {
+        inheritanceEdges = new HashMap<Entity, DefaultEdge>();
+    }
+    
+    @Override
+    protected Collection<? extends Entity> getEntities(DataMap map) {
+        return map.getObjEntities();
+    }
+
+    @Override
+    protected boolean isIsolated(DataDomain domain, Entity entity) {
+        return super.isIsolated(domain, entity) && 
+            ((ObjEntity) entity).getSuperEntity() == null && 
+             domain.getEntityResolver().lookupInheritanceTree(entity.getName()) == null;
+    }
+    
+    @Override
+    protected void postProcessEntity(Entity entity, DefaultGraphCell cell) {
+        super.postProcessEntity(entity, cell);
+        
+        GraphConstants.setBackground(cell.getAttributes(), ENTITY_COLOR);
+        GraphConstants.setOpaque(cell.getAttributes(), true);
+        
+        DefaultEdge edge = createInheritanceEdge((ObjEntity) entity);
+        if (edge != null) {
+            createdObjects.add(edge);
+        }
+    }
+    
+    DefaultEdge createInheritanceEdge(ObjEntity entity) {
+        if (!inheritanceEdges.containsKey(entity)) {
+            ObjEntity superEntity = entity.getSuperEntity();
+            if (superEntity != null) {
+                DefaultGraphCell sourceCell = entityCells.get(entity.getName());
+                DefaultGraphCell targetCell = entityCells.get(superEntity.getName());
+                
+                DefaultEdge edge = new DefaultEdge();
+                edge.setSource(sourceCell.getChildAt(0));
+                edge.setTarget(targetCell.getChildAt(0));
+                
+                GraphConstants.setDashPattern(edge.getAttributes(), new float[] { 5, 5 });
+                GraphConstants.setLineEnd(edge.getAttributes(), GraphConstants.ARROW_TECHNICAL);
+                GraphConstants.setSelectable(edge.getAttributes(), false);
+                
+                inheritanceEdges.put(entity, edge);
+                
+                return edge;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    protected EntityCellMetadata getCellMetadata(Entity e) {
+        return new ObjEntityCellMetadata(this, e.getName());
+    }
+    
+    @Override
+    public void setProjectController(ProjectController mediator) {
+        super.setProjectController(mediator);
+        
+        mediator.addObjEntityListener(this);
+        mediator.addObjAttributeListener(this);
+        mediator.addObjRelationshipListener(this);
+    }
+
+    public void destroy() {
+        super.destroy();
+        
+        mediator.removeObjEntityListener(this);
+        mediator.removeObjAttributeListener(this);
+        mediator.removeObjRelationshipListener(this);
+    }
+
+    public void objEntityAdded(EntityEvent e) {
+        if (isInCurrentDomain()) {
+            insertEntityCell(e.getEntity());
+        }
+    }
+
+    public void objEntityChanged(EntityEvent e) {
+        if (isInCurrentDomain()) {
+            remapEntity(e);
+            
+            updateEntityCell(e.getEntity());
+            
+            //maybe super entity was changed
+            ObjEntity entity = (ObjEntity) e.getEntity();
+            DefaultEdge inheritanceEdge = inheritanceEdges.get(entity);
+            if (inheritanceEdge != null) {
+                if (entity.getSuperEntity() == null) {
+                    graph.getGraphLayoutCache().remove(new Object[] { inheritanceEdge });
+                    inheritanceEdges.remove(entity);
+                }
+                else {
+                    inheritanceEdge.setTarget(entityCells.get(entity.getSuperEntity().getName()).getChildAt(0));
+                    
+                    Map nested = new HashMap();
+                    nested.put(inheritanceEdge, inheritanceEdge.getAttributes());
+                    
+                    graph.getGraphLayoutCache().edit(nested);
+                }
+            }
+            else {
+                if (entity.getSuperEntity() != null) {
+                    DefaultEdge edge = createInheritanceEdge(entity);
+                    graph.getGraphLayoutCache().insert(edge);
+                }
+            }
+        }
+    }
+
+    public void objEntityRemoved(EntityEvent e) {
+        if (isInCurrentDomain()) {
+            removeEntityCell(e.getEntity());
+        }
+    }
+
+    public void objAttributeAdded(AttributeEvent e) {
+        if (isInCurrentDomain()) {
+            updateEntityCell(e.getEntity());
+        }
+    }
+
+    public void objAttributeChanged(AttributeEvent e) {
+        if (isInCurrentDomain()) {
+            updateEntityCell(e.getEntity());
+        }
+    }
+
+    public void objAttributeRemoved(AttributeEvent e) {
+        if (isInCurrentDomain()) {
+            updateEntityCell(e.getEntity());
+        }
+    }
+
+    public void objRelationshipAdded(RelationshipEvent e) {
+        //nothing because relationship does not have target yet
+    }
+
+    public void objRelationshipChanged(RelationshipEvent e) {
+        if (isInCurrentDomain()) {
+            remapRelationship(e);
+            updateRelationshipCell(e.getRelationship());
+        }
+    }
+
+    public void objRelationshipRemoved(RelationshipEvent e) {
+        if (isInCurrentDomain()) {
+            removeRelationshipCell(e.getRelationship());
+        }
+    }
+    
+    @Override
+    protected void removeEntityCell(Entity e) {
+        super.removeEntityCell(e);
+        inheritanceEdges.remove(e);
+    }
+
+    public GraphType getType() {
+        return GraphType.CLASS;
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,108 @@
+/*****************************************************************
+ *   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.graph.action;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.Action;
+import javax.swing.Icon;
+
+import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.FindDialog;
+import org.apache.cayenne.modeler.graph.GraphBuilder;
+import org.apache.cayenne.modeler.util.CayenneAction;
+import org.apache.cayenne.project.ProjectPath;
+
+/**
+ * Action that displays one of the objects in main tree, 
+ * and then fires another action (if specified)
+ */
+public class EntityDisplayAction extends CayenneAction {
+    /**
+     * Action that will be performed after selection
+     */
+    CayenneAction delegate;
+    
+    GraphBuilder builder;
+    
+    public EntityDisplayAction(GraphBuilder builder) {
+        super("Show", Application.getInstance());
+        this.builder = builder;
+        init();
+    }
+    
+    public EntityDisplayAction(GraphBuilder builder, CayenneAction delegate) {
+        super((String) delegate.getValue(Action.NAME), Application.getInstance());
+        this.delegate = delegate;
+        this.builder = builder;
+        init();
+    }
+    
+    private void init() {
+        setEnabled(true);
+
+        /**
+         * Create icon manually, because at creation of super object delegate is null
+         */
+        Icon icon = createIcon();
+        if (icon != null) {
+            super.putValue(Action.SMALL_ICON, icon);
+        }
+    }
+
+    @Override
+    public void performAction(ActionEvent e) {
+        if (display()) {
+            if (delegate != null) {
+                delegate.performAction(e);
+            }
+        }
+    }
+    
+    boolean display() {
+        Entity entity = builder.getSelectedEntity();
+        if (entity == null) {
+            return false;
+        }
+        
+        ProjectController mediator = getProjectController();
+        
+        //we're always in same domain
+        FindDialog.jumpToResult(new Object[] { 
+                Application.getProject(), mediator.getCurrentDataDomain(), entity.getDataMap(), entity
+        });
+        
+        return true;
+    }
+
+    @Override
+    public String getIconName() {
+        if (delegate != null) {
+            return delegate.getIconName();
+        }
+        return null;
+    }
+
+    @Override
+    public boolean enableForPath(ProjectPath obj) {
+        return builder.getSelectedEntity() != null;
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RefreshGraphAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RefreshGraphAction.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RefreshGraphAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RefreshGraphAction.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,30 @@
+package org.apache.cayenne.modeler.graph.action;
+
+import java.awt.event.ActionEvent;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.graph.DataDomainGraphTab;
+import org.apache.cayenne.modeler.util.CayenneAction;
+
+/**
+ * Action for refreshing the graph 
+ */
+public class RefreshGraphAction extends CayenneAction {
+    private final DataDomainGraphTab dataDomainGraphTab;
+
+    public RefreshGraphAction(DataDomainGraphTab dataDomainGraphTab, Application application) {
+        super("Refresh", application);
+        this.dataDomainGraphTab = dataDomainGraphTab;
+        setEnabled(true);
+    }
+    
+    @Override
+    public String getIconName() {
+        return "icon-refresh.png";
+    }
+    
+    @Override
+    public void performAction(ActionEvent e) {
+        this.dataDomainGraphTab.itemStateChanged(null);
+    }
+}
\ No newline at end of file

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RemoveEntityAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RemoveEntityAction.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RemoveEntityAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/RemoveEntityAction.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,68 @@
+/*****************************************************************
+ *   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.graph.action;
+
+import java.awt.event.ActionEvent;
+
+import org.apache.cayenne.map.DbEntity;
+import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.action.RemoveAction;
+import org.apache.cayenne.modeler.dialog.ConfirmRemoveDialog;
+import org.apache.cayenne.modeler.graph.GraphBuilder;
+import org.apache.cayenne.modeler.undo.RemoveUndoableEdit;
+
+/**
+ * Action for removing entities from the graph
+ */
+public class RemoveEntityAction extends RemoveAction {
+    GraphBuilder builder;
+    
+    public RemoveEntityAction(GraphBuilder builder) {
+        super(Application.getInstance());
+        this.builder = builder;
+        setEnabled(true);
+    }
+
+    @Override
+    public void performAction(ActionEvent e, boolean allowAsking) {
+        ConfirmRemoveDialog dialog = getConfirmDeleteDialog(allowAsking);
+
+        Entity entity = builder.getSelectedEntity();
+        if (entity == null) {
+            return;
+        }
+        
+        if (entity instanceof ObjEntity) {
+            if (dialog.shouldDelete("ObjEntity", entity.getName())) {
+                application.getUndoManager().addEdit(
+                        new RemoveUndoableEdit(entity.getDataMap(), (ObjEntity) entity));
+                removeObjEntity(entity.getDataMap(), (ObjEntity) entity);
+            }
+        }
+        else {
+            if (dialog.shouldDelete("DbEntity", entity.getName())) {
+                application.getUndoManager().addEdit(
+                        new RemoveUndoableEdit(entity.getDataMap(), (DbEntity) entity));
+                removeDbEntity(entity.getDataMap(), (DbEntity) entity);
+            }
+        }
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/SaveAsImageAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/SaveAsImageAction.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/SaveAsImageAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/SaveAsImageAction.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,102 @@
+/*****************************************************************
+ *   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.graph.action;
+
+import java.awt.event.ActionEvent;
+import java.awt.image.BufferedImage;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.imageio.ImageIO;
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.graph.DataDomainGraphTab;
+import org.apache.cayenne.modeler.pref.FSPath;
+import org.apache.cayenne.modeler.util.CayenneAction;
+import org.apache.cayenne.modeler.util.FileFilters;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.jgraph.JGraph;
+
+/**
+ * Action for saving graph as image
+ */
+public class SaveAsImageAction extends CayenneAction {
+    private static final Log logObj = LogFactory.getLog(SaveAsImageAction.class);
+    
+    private final DataDomainGraphTab dataDomainGraphTab;
+    
+    public SaveAsImageAction(DataDomainGraphTab dataDomainGraphTab, Application application) {
+        super("Save As Image", application);
+        this.dataDomainGraphTab = dataDomainGraphTab;
+        setEnabled(true);
+    }
+    
+    @Override
+    public String getIconName() {
+        return "icon-save-as-image.png";
+    }
+    
+    @Override
+    public void performAction(ActionEvent e) {
+        // find start directory in preferences
+        FSPath lastDir = getApplication().getFrameController().getLastDirectory();
+
+        // configure dialog
+        JFileChooser chooser = new JFileChooser();
+        chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+        lastDir.updateChooser(chooser);
+        
+        chooser.setAcceptAllFileFilterUsed(false);
+        
+        String ext = "png";
+        chooser.addChoosableFileFilter(FileFilters.getExtensionFileFilter(ext, "PNG Images"));
+        
+        int status = chooser.showSaveDialog(Application.getFrame());
+        if (status == JFileChooser.APPROVE_OPTION) {
+            lastDir.updateFromChooser(chooser);
+            try {
+                String path = chooser.getSelectedFile().getPath();
+                if (!path.endsWith("." + ext)) {
+                    path += "." + ext;
+                }
+                
+                OutputStream out = new FileOutputStream(path);
+                
+                JGraph graph = dataDomainGraphTab.getGraph();
+                BufferedImage img = graph.getImage(null, 0);
+                ImageIO.write(img, ext, out);
+                out.flush();
+                out.close();
+            }
+            catch (IOException ex) {
+                logObj.error("Could not save image", ex);
+                JOptionPane.showMessageDialog(
+                        Application.getFrame(),
+                        "Could not save image.",
+                        "Error saving image",
+                        JOptionPane.ERROR_MESSAGE
+                );
+            }
+        }
+    }
+}
\ No newline at end of file

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomInAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomInAction.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomInAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomInAction.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,51 @@
+/*****************************************************************
+ *   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.graph.action;
+
+import java.awt.event.ActionEvent;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.graph.DataDomainGraphTab;
+import org.apache.cayenne.modeler.graph.GraphBuilder;
+import org.apache.cayenne.modeler.util.CayenneAction;
+import org.jgraph.JGraph;
+
+/**
+ * Action for zooming in graph
+ */
+public class ZoomInAction extends CayenneAction {    
+    private final DataDomainGraphTab dataDomainGraphTab;
+    
+    public ZoomInAction(DataDomainGraphTab dataDomainGraphTab, Application application) {
+        super("Zoom In", application);
+        this.dataDomainGraphTab = dataDomainGraphTab;
+        setEnabled(true);
+    }
+    
+    @Override
+    public String getIconName() {
+        return "icon-zoom-in.png";
+    }
+    
+    @Override
+    public void performAction(ActionEvent e) {
+        JGraph graph = dataDomainGraphTab.getGraph();
+        graph.setScale(graph.getScale() * GraphBuilder.ZOOM_FACTOR);
+    }
+}

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomOutAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomOutAction.java?rev=886158&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomOutAction.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/ZoomOutAction.java Wed Dec  2 14:37:42 2009
@@ -0,0 +1,51 @@
+/*****************************************************************
+ *   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.graph.action;
+
+import java.awt.event.ActionEvent;
+
+import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.graph.DataDomainGraphTab;
+import org.apache.cayenne.modeler.graph.GraphBuilder;
+import org.apache.cayenne.modeler.util.CayenneAction;
+import org.jgraph.JGraph;
+
+/**
+ * Action for zooming out graph
+ */
+public class ZoomOutAction extends CayenneAction {    
+    private final DataDomainGraphTab dataDomainGraphTab;
+    
+    public ZoomOutAction(DataDomainGraphTab dataDomainGraphTab, Application application) {
+        super("Zoom In", application);
+        this.dataDomainGraphTab = dataDomainGraphTab;
+        setEnabled(true);
+    }
+    
+    @Override
+    public String getIconName() {
+        return "icon-zoom-out.png";
+    }
+    
+    @Override
+    public void performAction(ActionEvent e) {
+        JGraph graph = dataDomainGraphTab.getGraph();
+        graph.setScale(graph.getScale() / GraphBuilder.ZOOM_FACTOR);
+    }
+}

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileFilters.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileFilters.java?rev=886158&r1=886157&r2=886158&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileFilters.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/FileFilters.java Wed Dec  2 14:37:42 2009
@@ -91,6 +91,13 @@
     public static FileFilter getEOModelSelectFilter() {
         return eomodelSelectFilter;
     }
+    
+    /**
+     * Returns filter that checks if file has specified extension
+     */
+    public static FileFilter getExtensionFileFilter(String ext, String description) {
+        return new ExtensionFileFilter(ext, description);
+    }
 
     static final class JavaClassArchiveFilter extends FileFilter {
         public boolean accept(File f) {
@@ -223,4 +230,28 @@
             return "*" + EOModelFileFilter.EOM_SUFFIX;
         }
     }
+
+    /**
+     * filter that checks if file has specified extension
+     */
+    static final class ExtensionFileFilter extends FileFilter {
+        String ext;
+        String description;
+        
+        ExtensionFileFilter(String ext, String description) {
+            this.ext = ext;
+            this.description = description;
+        }
+
+        @Override
+        public boolean accept(File f) {
+            return f.isDirectory() || f.getName().endsWith("." + ext);
+        }
+
+        @Override
+        public String getDescription() {
+            return description + "(." + ext + ")";
+        }
+        
+    }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java?rev=886158&r1=886157&r2=886158&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/ModelerUtil.java Wed Dec  2 14:37:42 2009
@@ -19,6 +19,7 @@
 
 package org.apache.cayenne.modeler.util;
 
+import java.io.File;
 import java.io.Serializable;
 import java.math.BigInteger;
 import java.net.URL;
@@ -35,12 +36,15 @@
 import org.apache.cayenne.access.DataDomain;
 import org.apache.cayenne.access.DataNode;
 import org.apache.cayenne.access.types.ExtendedTypeMap;
+import org.apache.cayenne.conf.Configuration;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.modeler.Application;
 import org.apache.cayenne.modeler.ModelerConstants;
+import org.apache.cayenne.modeler.ModelerProject;
 import org.apache.cayenne.modeler.ProjectController;
 import org.apache.cayenne.modeler.action.MultipleObjectsAction;
+import org.apache.cayenne.project.ApplicationProject;
 import org.apache.cayenne.reflect.PropertyUtils;
 import org.apache.cayenne.util.CayenneMapEntry;
 
@@ -175,4 +179,12 @@
             }
         }
     }
+    
+    /**
+     * Factory method to create modeler-specific project
+     */
+    public static ApplicationProject createModelerProject(File projectFile, Configuration configuration,
+            ProjectController mediator) {
+        return new ModelerProject(projectFile, configuration);
+    }
 }

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png?rev=886158&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png?rev=886158&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png?rev=886158&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png?rev=886158&view=auto
==============================================================================
Binary file - no diff available.

Propchange: cayenne/main/trunk/framework/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



Mime
View raw message