Package org.aperteworkflow.editor.ui.property

Source Code of org.aperteworkflow.editor.ui.property.AperteProcessClassInfo

package org.aperteworkflow.editor.ui.property;

import org.apache.commons.lang.StringUtils;
import org.aperteworkflow.editor.stepeditor.user.Property;
import org.aperteworkflow.editor.ui.permission.PermissionDefinition;
import pl.net.bluesoft.rnd.processtool.ui.widgets.annotations.*;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;
import pl.net.bluesoft.util.lang.Classes;

import java.lang.reflect.Field;
import java.util.*;

public class AperteProcessClassInfo {

  private List<Property<?>> properties;
  private List<PermissionDefinition> permissions;
  private String docName;
  private String docDescription;
  private String docIcon;
  private String aliasName;
  private boolean childrenAllowed;
  private Class<?> aperteClass;
 
  public AperteProcessClassInfo() {}
 
  public AperteProcessClassInfo(Class<?> aperteClass) {
    this(aperteClass, null);
  }
 
  public AperteProcessClassInfo(Class<?> aperteClass, Set<Permission> defaultPermissions) {
    this.aperteClass = aperteClass;
    AliasName an = Classes.getClassAnnotation(aperteClass, AliasName.class);
    ChildrenAllowed ca = aperteClass.getAnnotation(ChildrenAllowed.class);
    AperteDoc classDoc = Classes.getClassAnnotation(aperteClass, AperteDoc.class);
    List<Field> fields = Classes.getFieldsWithAnnotation(aperteClass, AutoWiredProperty.class);
    PermissionsUsed permissionsUsed = Classes.getClassAnnotation(aperteClass, PermissionsUsed.class);

    aliasName = an == null ? "" : an.name();
    childrenAllowed = ca == null ? false : ca.value();
        docName = null;
        docDescription = null;
        properties = new ArrayList<Property<?>>();
        permissions = getPermissionsFromAnnotation(permissionsUsed, defaultPermissions);
       
        I18NSource i18NSource = I18NSource.ThreadUtil.getThreadI18nSource();
       
    if (classDoc != null) {
      docName = i18NSource.getMessage(classDoc.humanNameKey());
      docDescription = i18NSource.getMessage(classDoc.descriptionKey());
      docIcon = i18NSource.getMessage(classDoc.icon());
    }
    if (StringUtils.isEmpty(docName)) {
      docName = aliasName;
    }
    if (StringUtils.isEmpty(docDescription)) {
      docDescription = aperteClass.getSimpleName();
    }
   
        if (fields != null && !fields.isEmpty()) {
          for (Field field : fields) {
            properties.add(getProperty(field));
          }
          Collections.sort(properties);
           
        }
  }
 
  private Property getProperty(Field field) {
    AutoWiredProperty awp = field.getAnnotation(AutoWiredProperty.class);
        AutoWiredPropertyConfigurator awpConfigurator = field.getAnnotation(AutoWiredPropertyConfigurator.class);
        AperteDoc fieldDoc = field.getAnnotation(AperteDoc.class);
        I18NSource i18NSource = I18NSource.ThreadUtil.getThreadI18nSource();
       
        String fieldDocName = null;
        String fieldDocDescription = null;
       
        if (fieldDoc != null) {
            fieldDocName = i18NSource.getMessage(fieldDoc.humanNameKey());
            fieldDocDescription = i18NSource.getMessage(fieldDoc.descriptionKey());
        }
        if (StringUtils.isEmpty(fieldDocName)) {
          fieldDocName = field.getName();
        }
        if (StringUtils.isEmpty(fieldDocDescription)) {
          fieldDocDescription = field.getName();
        }
        Property property = new Property(null, field.getType());
        property.setPropertyId(field.getName());
        property.setName(fieldDocName);
        property.setDescription(fieldDocDescription);
       
        if (awp != null) {
            property.setRequired(awp.required());
        }
        if (awpConfigurator != null) {
            property.setPropertyFieldClass(awpConfigurator.fieldClass());
        }
        return property;
  }

  public List<Property<?>> getProperties() {
    return properties;
  }

  public void setProperties(List<Property<?>> properties) {
    this.properties = properties;
  }

  public String getDocName() {
    return docName;
  }

  public void setDocName(String docName) {
    this.docName = docName;
  }

  public String getDocDescription() {
    return docDescription;
  }

  public void setDocDescription(String docDescription) {
    this.docDescription = docDescription;
  }

  public String getAliasName() {
    return aliasName;
  }

  public void setAliasName(String aliasName) {
    this.aliasName = aliasName;
  }

  public boolean isChildrenAllowed() {
    return childrenAllowed;
  }

  public void setChildrenAllowed(boolean childrenAllowed) {
    this.childrenAllowed = childrenAllowed;
  }

  public Class<?> getAperteClass() {
    return aperteClass;
  }

  public void setAperteClass(Class<?> aperteClass) {
    this.aperteClass = aperteClass;
  }

  public String getDocIcon() {
    return docIcon;
  }

  public void setDocIcon(String docIcon) {
    this.docIcon = docIcon;
  }

  public List<PermissionDefinition> getPermissions() {
    return permissions;
  }

  public void setPermissions(List<PermissionDefinition> permissions) {
    this.permissions = permissions;
  }
 
  private List<PermissionDefinition> getPermissionsFromAnnotation(PermissionsUsed permissionsUsed, Set<Permission> defaultPermissions) {
        List<PermissionDefinition> permissions = new ArrayList<PermissionDefinition>();

        Set<Permission> perms = null;
        if (permissionsUsed == null) {
            // only use default permissions when widget does not provide own annotation
            perms = defaultPermissions;
        } else {
            Permission[] usedPermissions = permissionsUsed.value();
            if (usedPermissions != null && usedPermissions.length > 0) {
                perms = new HashSet<Permission>();
                perms.addAll(Arrays.asList(usedPermissions));
            }
        }

        if (perms != null) {
            for (Permission perm : perms) {
                PermissionDefinition permissionDefinition = new PermissionDefinition();
                permissionDefinition.setKey(perm.key());
                permissionDefinition.setDescription(perm.desc());
                permissions.add(permissionDefinition);
            }

            Collections.sort(permissions);
        }

    return permissions;
  }
}
TOP

Related Classes of org.aperteworkflow.editor.ui.property.AperteProcessClassInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.