Search in sources :

Example 96 with DbRelationship

use of org.apache.cayenne.map.DbRelationship in project cayenne by apache.

the class DbRelationshipTableModel method setUpdatedValueAt.

public void setUpdatedValueAt(Object aValue, int row, int column) {
    DbRelationship rel = getRelationship(row);
    // If name column
    if (column == NAME) {
        RelationshipEvent e = new RelationshipEvent(eventSource, rel, entity, rel.getName());
        rel.setName((String) aValue);
        mediator.fireDbRelationshipEvent(e);
        fireTableCellUpdated(row, column);
    } else if (column == TARGET) {
        // If target column
        DbEntity target = (DbEntity) aValue;
        if (WarningDialogByDbTargetChange.showWarningDialog(mediator, rel)) {
            // clear joins...
            rel.removeAllJoins();
            rel.setTargetEntityName(target);
        }
        mediator.fireDbRelationshipEvent(new RelationshipEvent(eventSource, rel, entity));
    } else if (column == TO_DEPENDENT_KEY) {
        boolean flag = (Boolean) aValue;
        // make sure reverse relationship "to-dep-pk" is unset.
        if (flag) {
            DbRelationship reverse = rel.getReverseRelationship();
            if (reverse != null && reverse.isToDependentPK()) {
                String message = "Unset reverse relationship's \"To Dep PK\" setting?";
                int answer = JOptionPane.showConfirmDialog(Application.getFrame(), message);
                if (answer != JOptionPane.YES_OPTION) {
                    // no action needed
                    return;
                }
                // unset reverse
                reverse.setToDependentPK(false);
            }
        }
        rel.setToDependentPK(flag);
        mediator.fireDbRelationshipEvent(new RelationshipEvent(eventSource, rel, entity));
    } else if (column == CARDINALITY) {
        rel.setToMany((Boolean) aValue);
        mediator.fireDbRelationshipEvent(new RelationshipEvent(eventSource, rel, entity));
        updateDependentObjRelationships(rel);
    } else if (column == COMMENTS) {
        setComment((String) aValue, rel);
        mediator.fireDbRelationshipEvent(new RelationshipEvent(eventSource, rel, entity));
    }
    fireTableRowsUpdated(row, row);
}
Also used : DbEntity(org.apache.cayenne.map.DbEntity) DbRelationship(org.apache.cayenne.map.DbRelationship) RelationshipEvent(org.apache.cayenne.map.event.RelationshipEvent)

Example 97 with DbRelationship

use of org.apache.cayenne.map.DbRelationship in project cayenne by apache.

the class PasteUndoableEdit method undo.

@Override
public void undo() throws CannotUndoException {
    RemoveAttributeAction rAttributeAction = actionManager.getAction(RemoveAttributeAction.class);
    RemoveAction rAction = actionManager.getAction(RemoveAction.class);
    RemoveRelationshipAction rRelationShipAction = actionManager.getAction(RemoveRelationshipAction.class);
    RemoveCallbackMethodAction rCallbackMethodAction = actionManager.getAction(RemoveCallbackMethodAction.class);
    RemoveProcedureParameterAction rProcedureParamAction = actionManager.getAction(RemoveProcedureParameterAction.class);
    if (content instanceof DataMap) {
        if (where instanceof DataChannelDescriptor) {
            rAction.removeDataMap((DataMap) content);
        } else if (where instanceof DataNodeDescriptor) {
            rAction.removeDataMapFromDataNode((DataNodeDescriptor) where, (DataMap) content);
        }
    } else if (where instanceof DataMap) {
        if (content instanceof DbEntity) {
            rAction.removeDbEntity(map, (DbEntity) content);
        } else if (content instanceof ObjEntity) {
            rAction.removeObjEntity(map, (ObjEntity) content);
        } else if (content instanceof Embeddable) {
            rAction.removeEmbeddable(map, (Embeddable) content);
        } else if (content instanceof QueryDescriptor) {
            rAction.removeQuery(map, (QueryDescriptor) content);
        } else if (content instanceof Procedure) {
            rAction.removeProcedure(map, (Procedure) content);
        }
    } else if (where instanceof DbEntity) {
        if (content instanceof DbEntity) {
            rAction.removeDbEntity(map, (DbEntity) content);
        } else if (content instanceof DbAttribute) {
            rAttributeAction.removeDbAttributes(map, (DbEntity) where, new DbAttribute[] { (DbAttribute) content });
        } else if (content instanceof DbRelationship) {
            rRelationShipAction.removeDbRelationships((DbEntity) where, new DbRelationship[] { (DbRelationship) content });
        }
    } else if (where instanceof ObjEntity) {
        if (content instanceof ObjEntity) {
            rAction.removeObjEntity(map, (ObjEntity) content);
        } else if (content instanceof ObjAttribute) {
            rAttributeAction.removeObjAttributes((ObjEntity) where, new ObjAttribute[] { (ObjAttribute) content });
        } else if (content instanceof ObjRelationship) {
            rRelationShipAction.removeObjRelationships((ObjEntity) where, new ObjRelationship[] { (ObjRelationship) content });
        } else if (content instanceof ObjCallbackMethod) {
            ObjCallbackMethod[] methods = new ObjCallbackMethod[] { (ObjCallbackMethod) content };
            for (ObjCallbackMethod callbackMethod : methods) {
                rCallbackMethodAction.removeCallbackMethod(methods[0].getCallbackType(), callbackMethod.getName());
            }
        }
    } else if (where instanceof Procedure) {
        final Procedure procedure = (Procedure) where;
        if (content instanceof ProcedureParameter) {
            rProcedureParamAction.removeProcedureParameters(procedure, new ProcedureParameter[] { (ProcedureParameter) content });
        }
    } else if (where instanceof Embeddable) {
        if (content instanceof Embeddable) {
            rAction.removeEmbeddable(map, (Embeddable) content);
        } else if (content instanceof EmbeddableAttribute) {
            rAttributeAction.removeEmbeddableAttributes((Embeddable) where, new EmbeddableAttribute[] { (EmbeddableAttribute) content });
        }
    }
}
Also used : ProcedureParameter(org.apache.cayenne.map.ProcedureParameter) DataChannelDescriptor(org.apache.cayenne.configuration.DataChannelDescriptor) ObjRelationship(org.apache.cayenne.map.ObjRelationship) ObjAttribute(org.apache.cayenne.map.ObjAttribute) DbAttribute(org.apache.cayenne.map.DbAttribute) DataNodeDescriptor(org.apache.cayenne.configuration.DataNodeDescriptor) DataMap(org.apache.cayenne.map.DataMap) Embeddable(org.apache.cayenne.map.Embeddable) RemoveProcedureParameterAction(org.apache.cayenne.modeler.action.RemoveProcedureParameterAction) QueryDescriptor(org.apache.cayenne.map.QueryDescriptor) ObjEntity(org.apache.cayenne.map.ObjEntity) DbEntity(org.apache.cayenne.map.DbEntity) DbRelationship(org.apache.cayenne.map.DbRelationship) RemoveCallbackMethodAction(org.apache.cayenne.modeler.action.RemoveCallbackMethodAction) Procedure(org.apache.cayenne.map.Procedure) RemoveRelationshipAction(org.apache.cayenne.modeler.action.RemoveRelationshipAction) EmbeddableAttribute(org.apache.cayenne.map.EmbeddableAttribute) RemoveAction(org.apache.cayenne.modeler.action.RemoveAction) ObjCallbackMethod(org.apache.cayenne.modeler.editor.ObjCallbackMethod) RemoveAttributeAction(org.apache.cayenne.modeler.action.RemoveAttributeAction)

Example 98 with DbRelationship

use of org.apache.cayenne.map.DbRelationship in project cayenne by apache.

the class PasteAction method paste.

/**
 * Pastes single object
 */
public void paste(Object where, Object content, DataChannelDescriptor dataChannelDescriptor, DataMap map) {
    final ProjectController mediator = getProjectController();
    /**
     * Add a little intelligence - if a tree leaf is selected, we can paste to a
     * parent datamap
     */
    if (isTreeLeaf(where) && isTreeLeaf(content)) {
        where = mediator.getCurrentDataMap();
    }
    if ((where instanceof DataChannelDescriptor || where instanceof DataNodeDescriptor) && content instanceof DataMap) {
        // paste DataMap to DataDomain or DataNode
        DataMap dataMap = ((DataMap) content);
        dataMap.setName(NameBuilder.builder(dataMap, dataChannelDescriptor).baseName(dataMap.getName()).dupesPattern(COPY_PATTERN).name());
        /**
         * Update all names in the new DataMap, so that they would not conflict with
         * names from other datamaps of this domain
         */
        // add some intelligence - if we rename an entity, we should rename all links
        // to it as well
        Map<String, String> renamedDbEntities = new HashMap<>();
        Map<String, String> renamedObjEntities = new HashMap<>();
        Map<String, String> renamedEmbeddables = new HashMap<>();
        for (DbEntity dbEntity : dataMap.getDbEntities()) {
            String oldName = dbEntity.getName();
            dbEntity.setName(NameBuilder.builder(dbEntity, dataMap).baseName(dbEntity.getName()).dupesPattern(COPY_PATTERN).name());
            if (!oldName.equals(dbEntity.getName())) {
                renamedDbEntities.put(oldName, dbEntity.getName());
            }
        }
        for (ObjEntity objEntity : dataMap.getObjEntities()) {
            String oldName = objEntity.getName();
            objEntity.setName(NameBuilder.builder(objEntity, dataMap).baseName(objEntity.getName()).dupesPattern(COPY_PATTERN).name());
            if (!oldName.equals(objEntity.getName())) {
                renamedObjEntities.put(oldName, objEntity.getName());
            }
        }
        for (Embeddable embeddable : dataMap.getEmbeddables()) {
            String oldName = embeddable.getClassName();
            embeddable.setClassName(NameBuilder.builder(embeddable, dataMap).baseName(embeddable.getClassName()).dupesPattern(COPY_PATTERN).name());
            if (!oldName.equals(embeddable.getClassName())) {
                renamedEmbeddables.put(oldName, embeddable.getClassName());
            }
        }
        for (Procedure procedure : dataMap.getProcedures()) {
            procedure.setName(NameBuilder.builder(procedure, dataMap).baseName(procedure.getName()).dupesPattern(COPY_PATTERN).name());
        }
        for (QueryDescriptor query : dataMap.getQueryDescriptors()) {
            query.setName(NameBuilder.builder(query, dataMap).baseName(query.getName()).dupesPattern(COPY_PATTERN).name());
        }
        // if an entity was renamed, we rename all links to it too
        for (DbEntity dbEntity : dataMap.getDbEntities()) {
            for (DbRelationship rel : dbEntity.getRelationships()) {
                if (renamedDbEntities.containsKey(rel.getTargetEntityName())) {
                    rel.setTargetEntityName(renamedDbEntities.get(rel.getTargetEntityName()));
                }
            }
        }
        for (ObjEntity objEntity : dataMap.getObjEntities()) {
            if (renamedDbEntities.containsKey(objEntity.getDbEntityName())) {
                objEntity.setDbEntityName(renamedDbEntities.get(objEntity.getDbEntityName()));
            }
            if (renamedObjEntities.containsKey(objEntity.getSuperEntityName())) {
                objEntity.setSuperEntityName(renamedDbEntities.get(objEntity.getSuperEntityName()));
            }
            for (ObjRelationship rel : objEntity.getRelationships()) {
                if (renamedObjEntities.containsKey(rel.getTargetEntityName())) {
                    rel.setTargetEntityName(renamedObjEntities.get(rel.getTargetEntityName()));
                }
            }
        }
        mediator.addDataMap(this, dataMap);
    } else if (where instanceof DataMap) {
        // paste DbEntity to DataMap
        final DataMap dataMap = ((DataMap) where);
        // clear data map parent cache
        clearDataMapCache(dataMap);
        if (content instanceof DbEntity) {
            DbEntity dbEntity = (DbEntity) content;
            dbEntity.setName(NameBuilder.builder(dbEntity, dataMap).baseName(dbEntity.getName()).dupesPattern(COPY_PATTERN).name());
            dataMap.addDbEntity(dbEntity);
            CreateDbEntityAction.fireDbEntityEvent(this, mediator, dbEntity);
        } else if (content instanceof ObjEntity) {
            // paste ObjEntity to DataMap
            ObjEntity objEntity = (ObjEntity) content;
            objEntity.setName(NameBuilder.builder(objEntity, dataMap).baseName(objEntity.getName()).dupesPattern(COPY_PATTERN).name());
            dataMap.addObjEntity(objEntity);
            CreateObjEntityAction.fireObjEntityEvent(this, mediator, dataMap, objEntity);
        } else if (content instanceof Embeddable) {
            // paste Embeddable to DataMap
            Embeddable embeddable = (Embeddable) content;
            embeddable.setClassName(NameBuilder.builder(embeddable, dataMap).baseName(embeddable.getClassName()).dupesPattern(COPY_PATTERN).name());
            dataMap.addEmbeddable(embeddable);
            CreateEmbeddableAction.fireEmbeddableEvent(this, mediator, dataMap, embeddable);
        } else if (content instanceof QueryDescriptor) {
            QueryDescriptor query = (QueryDescriptor) content;
            query.setName(NameBuilder.builder(query, dataMap).dupesPattern(COPY_PATTERN).baseName(query.getName()).name());
            query.setDataMap(dataMap);
            dataMap.addQueryDescriptor(query);
            QueryType.fireQueryEvent(this, mediator, dataMap, query);
        } else if (content instanceof Procedure) {
            // paste Procedure to DataMap
            Procedure procedure = (Procedure) content;
            procedure.setName(NameBuilder.builder(procedure, dataMap).dupesPattern(COPY_PATTERN).baseName(procedure.getName()).name());
            dataMap.addProcedure(procedure);
            CreateProcedureAction.fireProcedureEvent(this, mediator, dataMap, procedure);
        }
    } else if (where instanceof DbEntity) {
        final DbEntity dbEntity = (DbEntity) where;
        if (content instanceof DbAttribute) {
            DbAttribute attr = (DbAttribute) content;
            attr.setName(NameBuilder.builder(attr, dbEntity).dupesPattern(COPY_PATTERN).baseName(attr.getName()).name());
            dbEntity.addAttribute(attr);
            CreateAttributeAction.fireDbAttributeEvent(this, mediator, mediator.getCurrentDataMap(), dbEntity, attr);
        } else if (content instanceof DbRelationship) {
            DbRelationship rel = (DbRelationship) content;
            rel.setName(NameBuilder.builder(rel, dbEntity).baseName(rel.getName()).dupesPattern(COPY_PATTERN).name());
            dbEntity.addRelationship(rel);
            CreateRelationshipAction.fireDbRelationshipEvent(this, mediator, dbEntity, rel);
        }
    } else if (where instanceof ObjEntity) {
        ObjEntity objEntity = (ObjEntity) where;
        if (content instanceof ObjAttribute) {
            ObjAttribute attr = (ObjAttribute) content;
            attr.setName(NameBuilder.builder(attr, objEntity).baseName(attr.getName()).dupesPattern(COPY_PATTERN).name());
            objEntity.addAttribute(attr);
            CreateAttributeAction.fireObjAttributeEvent(this, mediator, mediator.getCurrentDataMap(), objEntity, attr);
        } else if (content instanceof ObjRelationship) {
            ObjRelationship rel = (ObjRelationship) content;
            rel.setName(NameBuilder.builder(rel, objEntity).baseName(rel.getName()).dupesPattern(COPY_PATTERN).name());
            objEntity.addRelationship(rel);
            CreateRelationshipAction.fireObjRelationshipEvent(this, mediator, objEntity, rel);
        } else if (content instanceof ObjCallbackMethod) {
            ObjCallbackMethod method = (ObjCallbackMethod) content;
            method.setName(NameBuilder.builderForCallbackMethod(objEntity).baseName(method.getName()).dupesPattern(COPY_PATTERN).name());
            objEntity.getCallbackMap().getCallbackDescriptor(mediator.getCurrentCallbackType().getType()).addCallbackMethod(method.getName());
            CallbackMethodEvent ce = new CallbackMethodEvent(this, null, method.getName(), MapEvent.ADD);
            getProjectController().fireCallbackMethodEvent(ce);
        }
    } else if (where instanceof Embeddable) {
        final Embeddable embeddable = (Embeddable) where;
        if (content instanceof EmbeddableAttribute) {
            EmbeddableAttribute attr = (EmbeddableAttribute) content;
            attr.setName(NameBuilder.builder(attr, embeddable).baseName(attr.getName()).dupesPattern(COPY_PATTERN).name());
            embeddable.addAttribute(attr);
            CreateAttributeAction.fireEmbeddableAttributeEvent(this, mediator, embeddable, attr);
        }
    } else if (where instanceof Procedure) {
        // paste param to procedure
        final Procedure procedure = (Procedure) where;
        if (content instanceof ProcedureParameter) {
            ProcedureParameter param = (ProcedureParameter) content;
            param.setName(NameBuilder.builder(param, procedure).baseName(param.getName()).dupesPattern(COPY_PATTERN).name());
            procedure.addCallParameter(param);
            CreateProcedureParameterAction.fireProcedureParameterEvent(this, mediator, procedure, param);
        }
    }
}
Also used : ProcedureParameter(org.apache.cayenne.map.ProcedureParameter) DataChannelDescriptor(org.apache.cayenne.configuration.DataChannelDescriptor) ObjRelationship(org.apache.cayenne.map.ObjRelationship) ObjAttribute(org.apache.cayenne.map.ObjAttribute) HashMap(java.util.HashMap) DbAttribute(org.apache.cayenne.map.DbAttribute) DataNodeDescriptor(org.apache.cayenne.configuration.DataNodeDescriptor) ProjectController(org.apache.cayenne.modeler.ProjectController) DataMap(org.apache.cayenne.map.DataMap) Embeddable(org.apache.cayenne.map.Embeddable) QueryDescriptor(org.apache.cayenne.map.QueryDescriptor) ObjEntity(org.apache.cayenne.map.ObjEntity) DbEntity(org.apache.cayenne.map.DbEntity) CallbackMethodEvent(org.apache.cayenne.modeler.event.CallbackMethodEvent) DbRelationship(org.apache.cayenne.map.DbRelationship) Procedure(org.apache.cayenne.map.Procedure) EmbeddableAttribute(org.apache.cayenne.map.EmbeddableAttribute) ObjCallbackMethod(org.apache.cayenne.modeler.editor.ObjCallbackMethod)

Example 99 with DbRelationship

use of org.apache.cayenne.map.DbRelationship in project cayenne by apache.

the class RemoveAction method removeDBRelationships.

private void removeDBRelationships(ProjectController mediator, ConfirmRemoveDialog dialog, DbRelationship[] dbRels) {
    if (dbRels != null && dbRels.length > 0) {
        if ((dbRels.length == 1 && dialog.shouldDelete("DbRelationship", dbRels[0].getName())) || (dbRels.length > 1 && dialog.shouldDelete("selected DbRelationships"))) {
            DbEntity entity = mediator.getCurrentDbEntity();
            for (DbRelationship rel : dbRels) {
                entity.removeRelationship(rel.getName());
                RelationshipEvent e = new RelationshipEvent(Application.getFrame(), rel, entity, MapEvent.REMOVE);
                mediator.fireDbRelationshipEvent(e);
            }
            ProjectUtil.cleanObjMappings(mediator.getCurrentDataMap());
            Application.getInstance().getUndoManager().addEdit(new RemoveRelationshipUndoableEdit(entity, dbRels));
        }
    }
}
Also used : DbEntity(org.apache.cayenne.map.DbEntity) DbRelationship(org.apache.cayenne.map.DbRelationship) RemoveRelationshipUndoableEdit(org.apache.cayenne.modeler.undo.RemoveRelationshipUndoableEdit) RelationshipEvent(org.apache.cayenne.map.event.RelationshipEvent)

Example 100 with DbRelationship

use of org.apache.cayenne.map.DbRelationship in project cayenne by apache.

the class ResolveDbRelationshipDialog method save.

private void save() {
    stopEditing();
    DbJoinTableModel model = (DbJoinTableModel) table.getModel();
    boolean updatingReverse = model.getObjectList().size() > 0;
    // handle name update
    handleNameUpdate(relationship, name.getText().trim());
    model.commit();
    // maybe this is no longer valid
    if (relationship.isToDependentPK() && !relationship.isValidForDepPk()) {
        relationship.setToDependentPK(false);
    }
    // Don't create reverse with no joins - makes no sense...
    if (updatingReverse) {
        // If didn't find anything, create reverseDbRel
        if (reverseRelationship == null) {
            reverseRelationship = new DbRelationship();
            reverseRelationship.setName(NameBuilder.builder(reverseRelationship, relationship.getTargetEntity()).baseName(reverseName.getText().trim()).name());
            reverseRelationship.setSourceEntity(relationship.getTargetEntity());
            reverseRelationship.setTargetEntityName(relationship.getSourceEntity());
            reverseRelationship.setToMany(!relationship.isToMany());
            relationship.getTargetEntity().addRelationship(reverseRelationship);
            // this is needed to update entity view...
            if (relationship.getSourceEntity() == relationship.getTargetEntity()) {
                getMediator().fireDbRelationshipEvent(new RelationshipEvent(this, reverseRelationship, reverseRelationship.getSourceEntity(), MapEvent.ADD));
            }
        } else {
            handleNameUpdate(reverseRelationship, reverseName.getText().trim());
        }
        Collection<DbJoin> reverseJoins = getReverseJoins();
        reverseRelationship.setJoins(reverseJoins);
        // check if joins map to a primary key of this entity
        if (!relationship.isToDependentPK() && reverseRelationship.isValidForDepPk()) {
            reverseRelationship.setToDependentPK(true);
        }
    }
    Application.getInstance().getUndoManager().addEdit(undo);
    getMediator().fireDbRelationshipEvent(new RelationshipEvent(this, relationship, relationship.getSourceEntity()));
}
Also used : DbRelationship(org.apache.cayenne.map.DbRelationship) DbJoin(org.apache.cayenne.map.DbJoin) RelationshipEvent(org.apache.cayenne.map.event.RelationshipEvent)

Aggregations

DbRelationship (org.apache.cayenne.map.DbRelationship)106 DbEntity (org.apache.cayenne.map.DbEntity)59 DbAttribute (org.apache.cayenne.map.DbAttribute)35 DbJoin (org.apache.cayenne.map.DbJoin)35 ObjEntity (org.apache.cayenne.map.ObjEntity)30 ObjRelationship (org.apache.cayenne.map.ObjRelationship)28 ObjAttribute (org.apache.cayenne.map.ObjAttribute)20 Test (org.junit.Test)15 ClassDescriptor (org.apache.cayenne.reflect.ClassDescriptor)13 ArrayList (java.util.ArrayList)11 CayenneRuntimeException (org.apache.cayenne.CayenneRuntimeException)10 EJBQLException (org.apache.cayenne.ejbql.EJBQLException)9 DataMap (org.apache.cayenne.map.DataMap)9 Entity (org.apache.cayenne.map.Entity)8 AttributeProperty (org.apache.cayenne.reflect.AttributeProperty)8 PropertyVisitor (org.apache.cayenne.reflect.PropertyVisitor)8 ToManyProperty (org.apache.cayenne.reflect.ToManyProperty)8 ToOneProperty (org.apache.cayenne.reflect.ToOneProperty)8 HashMap (java.util.HashMap)6 ObjectId (org.apache.cayenne.ObjectId)6