public Collection<MetaClassRepViewProperty> getProperties() { Collection<MetaClassRepViewProperty> result = new ArrayList<>(); MetaClass meta = getMetaClass(view.getEntityClass()); for (ViewProperty property : view.getProperties()) { if (!MetaClassRepresentation.viewPropertyReadPermitted(meta, property)) continue; result.add(new MetaClassRepViewProperty(property)); } return result; } }
protected void dumpHtml(View view, StringBuilder content) { content.append("<br/>").append("\n"); String metaClassName = metadata.getSession().getClass(view.getEntityClass()).getName(); String viewHtmlId = metaClassName + "__" + view.getName(); content.append("+ <a href=\"#").append(viewHtmlId).append("\"><span id=\"").append(viewHtmlId).append("\">") .append(metaClassName).append("/").append(view.getName()) .append("</span></a>"); for (ViewProperty viewProperty : view.getProperties()) { dumpHtml(viewProperty, content, " "); } content.append("<br/>").append("\n"); }
protected void putProperties(Map<String, ViewProperty> thisProperties, Collection<ViewProperty> sourceProperties) { for (ViewProperty sourceProperty : sourceProperties) { String sourcePropertyName = sourceProperty.getName(); if (thisProperties.containsKey(sourcePropertyName)) { View sourcePropertyView = sourceProperty.getView(); if (sourcePropertyView != null && isNotEmpty(sourcePropertyView.getProperties())) { Map<String, ViewProperty> thisViewProperties = thisProperties.get(sourcePropertyName).getView().properties; putProperties(thisViewProperties, sourcePropertyView.getProperties()); } } else { thisProperties.put(sourceProperty.getName(), sourceProperty); } } }
protected Set<Class> collectEntityClasses(View view, Set<View> visited) { if (visited.contains(view)) { return Collections.emptySet(); } else { visited.add(view); } HashSet<Class> classes = new HashSet<>(); classes.add(view.getEntityClass()); for (ViewProperty viewProperty : view.getProperties()) { if (viewProperty.getView() != null) { classes.addAll(collectEntityClasses(viewProperty.getView(), visited)); } } return classes; }
protected Set<Class> collectEntityClasses(View view, Set<View> visited) { if (visited.contains(view)) { return Collections.emptySet(); } else { visited.add(view); } HashSet<Class> classes = new HashSet<>(); classes.add(view.getEntityClass()); for (ViewProperty viewProperty : view.getProperties()) { if (viewProperty.getView() != null) { classes.addAll(collectEntityClasses(viewProperty.getView(), visited)); } } return classes; }
protected boolean needReloading(Entity entity, View view) { for (ViewProperty viewProperty : view.getProperties()) { if (!entityStates.isLoaded(entity, viewProperty.getName())) { return true; } } return false; }
protected void dump(View view, StringBuilder content) { content.append("\n"); content.append("+ ") .append(metadata.getSession().getClass(view.getEntityClass()).getName()) .append("/") .append(view.getName()); for (ViewProperty viewProperty : view.getProperties()) { dump(viewProperty, content, " "); } content.append("\n"); }
public View(ViewParams viewParams) { this.entityClass = viewParams.entityClass; this.name = viewParams.name != null ? viewParams.name : ""; if (viewParams.includeSystemProperties) { for (String propertyName : findSystemProperties(entityClass)) { addProperty(propertyName); } } List<View> sources = viewParams.src; if (isNotEmpty(sources)) { Class<? extends Entity> entityClass = sources.get(0).entityClass; if (this.entityClass == null) { this.entityClass = entityClass; } for (View view : sources) { putProperties(this.properties, view.getProperties()); } } }
protected void dumpHtml(ViewProperty viewProperty, StringBuilder content, String indent) { content.append("<br/>").append("\n"); content.append(indent); content.append("- ").append(viewProperty.getName()); View innerView = viewProperty.getView(); if (innerView != null) { if (StringUtils.isNotEmpty(innerView.getName())) { String metaClassName = metadata.getSession().getClass(innerView.getEntityClass()).getName(); content.append(" -> <a href=\"#").append(metaClassName).append("__").append(innerView.getName()).append("\">") .append(metaClassName) .append("/") .append(innerView.getName()) .append("</a>"); } else { for (ViewProperty innerProperty : innerView.getProperties()) { dumpHtml(innerProperty, content, " " + indent); } } } }
protected void dump(ViewProperty viewProperty, StringBuilder content, String indent) { content.append("\n"); content.append(indent); content.append("- ").append(viewProperty.getName()); View innerView = viewProperty.getView(); if (innerView != null) { if (StringUtils.isNotEmpty(innerView.getName())) { content.append(" -> ") .append(metadata.getSession().getClass(innerView.getEntityClass()).getName()) .append("/") .append(innerView.getName()); } else { for (ViewProperty innerProperty : innerView.getProperties()) { dump(innerProperty, content, " " + indent); } } } }
protected List<String> removeNonExistingProperties(List<String> propertiesList, MetaClass metaClass) { View view = target.getDatasource().getView(); if (view != null && !view.getProperties().isEmpty()) { return getUnRemovedProperties(propertiesList, view, metaClass); } List<String> result = new ArrayList<>(); if (metadata.getTools().isNotPersistent(metaClass)) { for (String property : propertiesList) { if (metaClass.getPropertyPath(property) != null) { result.add(property); } } return result; } view = getView(metaClass); return getUnRemovedProperties(propertiesList, view, metaClass); }
protected EntityDiff getDifferenceByView(EntitySnapshot first, EntitySnapshot second, View diffView) { EntityDiff result = new EntityDiff(diffView); result.setBeforeSnapshot(first); result.setAfterSnapshot(second); if (!diffView.getProperties().isEmpty()) { Entity firstEntity = first != null ? snapshotAPI.extractEntity(first) : null; Entity secondEntity = snapshotAPI.extractEntity(second); result.setBeforeEntity(firstEntity); result.setAfterEntity(secondEntity); Stack<Object> diffBranch = new Stack<>(); if (secondEntity != null) { diffBranch.push(secondEntity); } List<EntityPropertyDiff> propertyDiffs = getPropertyDiffs(diffView, firstEntity, secondEntity, diffBranch); result.setPropertyDiffs(propertyDiffs); } return result; }
public View findSubViewByCollectionPropertyName(View view, final String propertyName) { if (view == null) { return null; } for (ViewProperty viewProperty : view.getProperties()) { if (propertyName.equals(viewProperty.getName())) { if (viewProperty.getView() != null) { return viewProperty.getView(); } } if (viewProperty.getView() != null) { View foundedView = findSubViewByCollectionPropertyName(viewProperty.getView(), propertyName); if (foundedView != null) { return foundedView; } } } return null; }
protected void replaceOverridden(View root, View replacementView, HashSet<View> checked) { checked.add(root); List<ViewProperty> replacements = null; for (ViewProperty property : root.getProperties()) { View propertyView = property.getView(); if (propertyView != null) { if (Objects.equals(propertyView.getName(), replacementView.getName()) && replacementView.getEntityClass() == propertyView.getEntityClass()) { if (replacements == null) { replacements = new LinkedList<>(); } replacements.add(new ViewProperty(property.getName(), replacementView, property.getFetchMode())); } else if (propertyView.getEntityClass() != null && !checked.contains(propertyView)) { replaceOverridden(propertyView, replacementView, checked); } } } if (replacements != null) { for (ViewProperty replacement : replacements) { root.addProperty(replacement.getName(), replacement.getView(), replacement.getFetchMode()); } } }
public static View copy(@Nullable View view) { if (view == null) { return null; } View.ViewParams viewParams = new View.ViewParams() .entityClass(view.getEntityClass()) .name(view.getName()); View copy = new View(viewParams); for (ViewProperty property : view.getProperties()) { copy.addProperty(property.getName(), copy(property.getView()), property.getFetchMode()); } return copy; }
protected View copyView(@Nullable View view) { if (view == null) { return null; } View.ViewParams viewParams = new View.ViewParams() .entityClass(view.getEntityClass()) .name(view.getName()); View copy = new View(viewParams); for (ViewProperty property : view.getProperties()) { copy.addProperty(property.getName(), copyView(property.getView()), property.getFetchMode()); } return copy; }
public static View intersectViews(View first, View second) { if (first == null) throw new IllegalArgumentException("View is null"); if (second == null) throw new IllegalArgumentException("View is null"); View resultView = new View(first.getEntityClass()); Collection<ViewProperty> firstProps = first.getProperties(); for (ViewProperty firstProperty : firstProps) { if (second.containsProperty(firstProperty.getName())) { View resultPropView = null; ViewProperty secondProperty = second.getProperty(firstProperty.getName()); if ((firstProperty.getView() != null) && (secondProperty.getView() != null)) { resultPropView = intersectViews(firstProperty.getView(), secondProperty.getView()); } resultView.addProperty(firstProperty.getName(), resultPropView); } } return resultView; } }
protected void copyViewProperties(View src, View target, MetaClass metaClass) { for (ViewProperty viewProperty : src.getProperties()) { MetaProperty metaProperty = metaClass.getProperty(viewProperty.getName()); if (metaProperty == null || !metadata.getTools().isSystemLevel(metaProperty)) { if (!target.containsProperty(viewProperty.getName())) { target.addProperty(viewProperty.getName(), viewProperty.getView(), viewProperty.getFetchMode()); } } } }
protected void copyViewProperties(View src, View target) { for (ViewProperty viewProperty : src.getProperties()) { MetaProperty metaProperty = metaClass.getProperty(viewProperty.getName()); if (metaProperty == null || !metadata.getTools().isSystemLevel(metaProperty)) { if (!target.containsProperty(viewProperty.getName())) { target.addProperty(viewProperty.getName(), viewProperty.getView(), viewProperty.getFetchMode()); } } } } }
private void copyViewConsideringPermissions(View srcView, View dstView) { MetaClass metaClass = metadata.getClassNN(srcView.getEntityClass()); for (ViewProperty property : srcView.getProperties()) { if (security.isEntityAttrReadPermitted(metaClass, property.getName())) { View viewCopy = null; if (property.getView() != null) { viewCopy = new View(property.getView().getEntityClass(), property.getView().getName() + "(restricted)", false); copyViewConsideringPermissions(property.getView(), viewCopy); } dstView.addProperty(property.getName(), viewCopy, property.getFetchMode()); } } }