@Path("/updatetype") @POST public XMLEntityMappings updateType(XMLEntityMappings entityMappings) throws Exception { String name = null; if (!entityMappings.getEntities().isEmpty()) { EntityAccessor entityAccessor = entityMappings.getEntities().get(0); name = entityAccessor.getName(); name = Utils.upperFirstLetter(name); entityAccessor.setName(name); entityAccessor.setClassName(name); JpaMapHelper.replaceClassAccessor(DynamicMetaSource.getEntityMaps(), entityAccessor); } else if (!entityMappings.getEmbeddables().isEmpty()) { EmbeddableAccessor embeddableAccessor = entityMappings.getEmbeddables().get(0); name = embeddableAccessor.getName(); name = Utils.upperFirstLetter(name); embeddableAccessor.setName(name); embeddableAccessor.setClassName(name); JpaMapHelper.replaceClassAccessor(DynamicMetaSource.getEntityMaps(), embeddableAccessor); } DynamicMetaSource.normalize(); mapPersister.save(DynamicMetaSource.getEntityMaps()); return getSingleType(name); }
@Path("deleteprop/{typename}/{propname}") @GET public XMLEntityMappings deleteProp( @PathParam("typename") String typeName, @PathParam("propname") String propName) throws Exception { ClassAccessor entity = JpaMapHelper.findClassAccessor(DynamicMetaSource.getEntityMaps(), typeName); Attribute<?, ?> attr = JpaMetamodelHelper.getAttribute(typeName, propName); if (JpaMapHelper.findPropertyBbyMappedBy( JpaMetamodelHelper.getAttributeType(attr).getSimpleName(), propName) != null) { throw new CodedExceptionImpl( PROP_REFERED, "Deletion can not be performed. Target Property is referred by other types"); } EntityManager eManager = App.getEM(); eManager.getTransaction().begin(); Connection connection = eManager.unwrap(Connection.class); for (String sql : JpaHelper.deletePropDBStructure(eManager, typeName, propName)) { LOGGER.info(sql); connection.createStatement().execute(sql); } eManager.getTransaction().commit(); JpaMapHelper.deleteProp(entity, propName); App.getPersistenceUnit().refresh(false); mapPersister.save(DynamicMetaSource.getEntityMaps()); return DynamicMetaSource.getEntityMaps(); }
@GET @Path("/getmultiple/{types}") public XMLEntityMappings getMutlipleType(@PathParam("types") String types) throws Exception { XMLEntityMappings entityMaps = MetaSourceBuilder.createEmptyEntityMappings(); Set<String> processed = new HashSet<>(); String[] names = types.split(","); for (String typename : names) { if (processed.contains(typename)) { continue; } ClassAccessor accessor = JpaMapHelper.findClassAccessor(DynamicMetaSource.getEntityMaps(), typename); if (accessor == null) { continue; } JpaMapHelper.addClassAccessor(entityMaps, accessor); TableGeneratorMetadata meta = JpaMapHelper.retrieveTableGenerator(DynamicMetaSource.getEntityMaps(), accessor); if (meta != null) { entityMaps.getTableGenerators().add(meta); } } return entityMaps; }
@GET @Path("/getsingle/{typename}") public XMLEntityMappings getSingleType(@PathParam("typename") String typename) throws Exception { XMLEntityMappings entityMaps = MetaSourceBuilder.createEmptyEntityMappings(); ClassAccessor accessor = JpaMapHelper.findClassAccessor(DynamicMetaSource.getEntityMaps(), typename); if (accessor == null) { throw new HttpCodeException( Status.NO_CONTENT.getStatusCode(), "type " + typename + " is not found"); } JpaMapHelper.addClassAccessor(entityMaps, accessor); TableGeneratorMetadata meta = JpaMapHelper.retrieveTableGenerator(DynamicMetaSource.getEntityMaps(), accessor); if (meta != null) { entityMaps.getTableGenerators().add(meta); } return entityMaps; }
@Path("deletetype/{typename}") @GET public XMLEntityMappings deleteType(@PathParam("typename") String typeName) throws Exception { List<Attribute<?, ?>> attrs = JpaMetamodelHelper.findReferringProps(typeName, true); if (!attrs.isEmpty()) { throw new CodedExceptionImpl( TYPE_REFERED, "Deletion can not be performed. Target type is referred by other types"); } EntityManager eManager = App.getEM(); eManager.getTransaction().begin(); Connection connection = eManager.unwrap(Connection.class); for (String sql : JpaHelper.deletePropDBStructure(eManager, typeName)) { LOGGER.info(sql); connection.createStatement().execute(sql); } eManager.getTransaction().commit(); JpaMapHelper.deleteClassAccessor(DynamicMetaSource.getEntityMaps(), typeName); App.getPersistenceUnit().refresh(false); mapPersister.save(DynamicMetaSource.getEntityMaps()); return DynamicMetaSource.getEntityMaps(); }
@SuppressWarnings("rawtypes") public static FileIDs searchFileIDs(FleximsDynamicEntityImpl de, String propName, String prefix) { FileIDs fileIDs = new FileIDs(); XMLEntityMappings mappings = JpaMapHelper.getInternaEntityMappings(); Class<?> clz = de.getClass(); String firstName = null; String subName = null; if (propName != null) { int i = propName.indexOf('.'); if (i != -1) { firstName = propName.substring(0, i); subName = propName.substring(i + 1); } else { firstName = propName; } } while (clz != FleximsDynamicEntityImpl.class && clz != Object.class) { ClassAccessor accessor = JpaMapHelper.findClassAccessor(mappings, clz.getSimpleName()); if (accessor != null && accessor.getAttributes() != null) { // single file. for (BasicAccessor prop : accessor.getAttributes().getBasics()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Object value = de.get(prop.getName()); if (value == null) { continue; } if (isFileUpload(prop)) { FileID fileID = FileID.valueOf((String) value); if (fileID != null) { fileIDs.getFileIDs().add(fileID); fileID.setPropName(prefix == null ? prop.getName() : prefix + "/" + prop.getName()); } } } for (ElementCollectionAccessor prop : accessor.getAttributes().getElementCollections()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Collection values = de.get(prop.getName()); if (values == null || values.isEmpty()) { continue; } if (isFileUpload(prop)) { for (Object value : values) { FileID fileID = FileID.valueOf((String) value); if (fileID != null) { fileIDs.getFileIDs().add(fileID); fileID.setPropName(prefix == null ? prop.getName() : prefix + "/" + prop.getName()); } } continue; } Object firstObject = values.iterator().next(); // collection of embedded if (firstObject instanceof FleximsDynamicEntityImpl) { for (Object obj : values) { FleximsDynamicEntityImpl embeded = (FleximsDynamicEntityImpl) obj; FileIDs iDs = searchFileIDs( embeded, subName, prefix == null ? prop.getName() : prefix + "/" + prop.getName()); fileIDs.getFileIDs().addAll(iDs.getFileIDs()); } } } for (EmbeddedAccessor prop : accessor.getAttributes().getEmbeddeds()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } FleximsDynamicEntityImpl embeded = de.get(prop.getName()); if (embeded == null) { continue; } if (embeded != null) { FileIDs iDs = searchFileIDs( embeded, subName, prefix == null ? prop.getName() : prefix + "/" + prop.getName()); fileIDs.getFileIDs().addAll(iDs.getFileIDs()); } } } clz = clz.getSuperclass(); } return fileIDs; }
@SuppressWarnings("rawtypes") public static FileInfos searchServerFileInfos( FleximsDynamicEntityImpl de, String propName, Path prefix, Path start) { FileInfos fileInfos = new FileInfos(); if (prefix == null) { prefix = serverFileTopDir(); } if (start == null) { start = serverFileTopDir(); } XMLEntityMappings mappings = JpaMapHelper.getInternaEntityMappings(); Class<?> clz = de.getClass(); String firstName = null; String subName = null; if (propName != null) { int i = propName.indexOf('.'); if (i != -1) { firstName = propName.substring(0, i); subName = propName.substring(i + 1); } else { firstName = propName; } } while (clz != FleximsDynamicEntityImpl.class && clz != Object.class) { ClassAccessor accessor = JpaMapHelper.findClassAccessor(mappings, clz.getSimpleName()); if (accessor != null) { // single file. for (BasicAccessor prop : accessor.getAttributes().getBasics()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Object value = de.get(prop.getName()); if (value == null) { continue; } if (isServerFile(prop)) { Path filePath = prefix.resolve((String) value); if (!filePath.startsWith(prefix)) { // you can not navigate out. continue; } FileInfo fileInfo = pathToFileInfo(filePath, start); fileInfos.getFileInfos().add(fileInfo); } } for (ElementCollectionAccessor prop : accessor.getAttributes().getElementCollections()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } Collection values = de.get(prop.getName()); if (values == null || values.isEmpty()) { continue; } if (isServerFile(prop)) { for (Object value : values) { Path filePath = prefix.resolve((String) value); if (!filePath.startsWith(prefix)) { // you can not navigate out. continue; } FileInfo fileInfo = pathToFileInfo(filePath, start); fileInfos.getFileInfos().add(fileInfo); } continue; } Object firstObject = values.iterator().next(); // collection of embedded if (firstObject instanceof FleximsDynamicEntityImpl) { for (Object obj : values) { FleximsDynamicEntityImpl embeded = (FleximsDynamicEntityImpl) obj; FileInfos fileInfos2 = searchServerFileInfos(embeded, subName, prefix, start); fileInfos.getFileInfos().addAll(fileInfos2.getFileInfos()); } } } for (EmbeddedAccessor prop : accessor.getAttributes().getEmbeddeds()) { if (firstName != null && !prop.getName().equals(firstName)) { continue; } FleximsDynamicEntityImpl embeded = de.get(prop.getName()); if (embeded == null) { continue; } if (embeded != null) { FileInfos fileInfos2 = searchServerFileInfos(embeded, subName, prefix, start); fileInfos.getFileInfos().addAll(fileInfos2.getFileInfos()); } } } clz = clz.getSuperclass(); } return fileInfos; }
public MappingAccessor getTargetPropertyConfig() { ClassAccessor queryType = JpaMapHelper.findClassAccessor(DynamicMetaSource.getEntityMaps(), query.getQueryType()); return JpaMapHelper.findProp(queryType, getProp()); }