public RelationType(Map<String, String> cmd) { name = cmd.get("name"); description = cmd.get("description"); leftobjectprotected = cmd.get("leftobjectprotected").equals("true"); rightobjectprotected = cmd.get("rightobjectprotected").equals("true"); cloneOnLeftCopy = cmd.get("cloneOnLeftCopy").equals("true"); cloneOnRightCopy = cmd.get("cloneOnRightCopy").equals("true"); cloneOnLeftVersion = cmd.get("cloneOnLeftVersion").equals("true"); cloneOnRightVersion = cmd.get("cloneOnRightVersion").equals("true"); EntityManager em = HibernateSession.getLocalEntityManager(); RelationResolverDAO rdd = daoFactory.getRelationResolverDAO(em); /* * Design note: resolve by name is intended to make it easier for testing * as you can create a test relation type without having to look up the id of the * default (or to-be-tested) relation resolver. */ if (cmd.containsKey("right_resolver")) { rightResolver = rdd.findByName(cmd.get("right_resolver")); } else if (cmd.containsKey("right_resolver_id")) { rightResolver = rdd.get( ParamParser.parseLong(cmd.get("right_resolver_id"), "error.param.right_resolver_id")); } else { rightResolver = rdd.findByName(Constants.RELATION_RESOLVER_FIXED); } if (cmd.containsKey("left_resolver")) { leftResolver = rdd.findByName(cmd.get("left_resolver")); } else if (cmd.containsKey("left_resolver_id")) { rightResolver = rdd.get( ParamParser.parseLong(cmd.get("left_resolver_id"), "error.param.left_resolver_id")); } else { leftResolver = rdd.findByName(Constants.RELATION_RESOLVER_FIXED); } if (rightResolver == null) { throw new CinnamonException("error.param.right_resolver_id"); } if (leftResolver == null) { throw new CinnamonException("error.param.left_resolver_id"); } log.debug("leftResolver: " + leftResolver); log.debug("rightResolver: " + rightResolver); }