Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.openl.rules.repository.jcr;
  
  import java.util.Date;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
 import java.util.Set;
 
 import javax.jcr.Node;
 
 
Implementation of JCR Entity. It is linked with node in JCR implementation, always.

Author(s):
Aleh Bykhavets
 
 public class JcrEntityAPI extends JcrCommonArtefact implements ArtefactAPI {
     private final Log log = LogFactory.getLog(JcrEntityAPI.class);
     /*
     private static final String[] ALLOWED_PROPS = {ArtefactProperties.PROP_EFFECTIVE_DATE, ArtefactProperties.PROP_EXPIRATION_DATE, 
         ArtefactProperties.PROP_LINE_OF_BUSINESS, ArtefactProperties.VERSION_COMMENT};
     */
     private Map<StringObjectprops;
 
     private JcrVersion version;
     private ArtefactPath path;
 
     // ------ protected methods ------
     public JcrEntityAPI(Node nodeRTransactionManager transactionManagerArtefactPath pathboolean oldVersionthrows RepositoryException {
         super(nodepath.segment(path.segmentCount() - 1), oldVersion);
         this. = path;
         this. = transactionManager;
          = new JcrVersion(node);
         
          = TablePropertyDefinitionUtils.getDimensionalTableProperties();
 
          = new HashMap<Stringorg.openl.rules.common.Property>();
         initProperties();
          = new HashMap<StringObject>();
         loadProps();
     }
 
     public void addProperty(String nameValueType typeObject valuethrows PropertyException {
         if (hasProperty(name)) {
             removeProperty(name);
         }
 
         if (value != null) {
             try {
                 NodeUtil.smartCheckout(node(), false);
                 JcrProperty jp;
                 try {
                     jp = new JcrProperty(node(), nametypevalue);
                 } catch (RRepositoryException e) {
                     throw new PropertyException("Internal error."e);
                 }
                 .put(namejp);
                 node().save();
             } catch (RepositoryException e) {
                 throw new PropertyException("Internal error."e);
             }
         }
     }
    private void buildRelPath(StringBuilder sbNode nthrows RepositoryException {
        if (!n.isNodeType(.)) {
            buildRelPath(sbn.getParent());
        }
        if (!n.isNodeType(.)) {
            sb.append('/');
            sb.append(n.getName());
        }
    }
    public String getPath() throws RRepositoryException {
        StringBuilder sb = new StringBuilder(128);
        try {
            buildRelPath(sbnode());
        } catch (RepositoryException e) {
            throw new RRepositoryException("Failed to get relative path."e);
        }
        return sb.toString();
    }
        return .values();
    }
    public org.openl.rules.common.Property getProperty(String namethrows PropertyException {
        org.openl.rules.common.Property rp = .get(name);
        try {
            if (node().hasProperty(name)) {
                rp = new JcrProperty(node(), node().getProperty(name));
                .put(namerp);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        if (rp == null) {
            throw new PropertyException("No such property ''{0}''."nullname);
        }
        return rp;
    }
    public Map<StringObjectgetProps() {
        return ;
    }
    public boolean hasProperty(String name) {
        if (.containsKey(name)) {
            return true;
        }
        try {
            return node().hasProperty(name);
        } catch (RepositoryException e) {
            return false;
        }
    }
    private void initProperties() throws RepositoryException {
        .clear();
        Node n = node();
        
        for (TablePropertyDefinition prop : ) {
            String propName = prop.getName();
            
            if (n.hasProperty(propName)) {
                Property p = n.getProperty(propName);
                .put(propNamenew JcrProperty(node(), p));
            }
        }
    }
    private void loadProps() throws RepositoryException {
        Node n = node();
        
        /*Set dimension props*/
        for (TablePropertyDefinition prop : ) {
            String propName = prop.getName();
            if (n.hasProperty(propName)) {
                .put(propNamegetPropValueByType(propName));
            }
        }
        
        /*Set attrs*/
        for (int i = 1; i <= .i++) {
            String propName = . + i;
            if (n.hasProperty(propName)) {
                .put(propNamegetPropValueByType(propName));
            }
        }
    }
    
    private Object getPropValueByType(String propNamethrows RepositoryException {
        Node n = node();
        return getPropValueByType(propNamen);
    }
    
    private Object getPropValueByType(String propNameNode nthrows RepositoryException {
        
        Value value = n.getProperty(propName).getValue();
        Object propValue = null;
        int valueType = value.getType();
        switch (valueType) {
            case .:
                propValue = value.getDate().getTime();
                break;
            case .:
                propValue = new Date(value.getLong());
                break;
            case .:
                propValue = value.getDouble();
                break;
            default:
                propValue = value.getString();
                break;
        }
        
        return propValue;
    }
        org.openl.rules.common.Property rp = getProperty(name);
        if (rp == null) {
            throw new PropertyException("No such property ''{0}''."nullname);
        }
        Node n = node();
        try {
            NodeUtil.smartCheckout(nfalse);
            n.getProperty(name).remove();
            n.save();
        } catch (RepositoryException e) {
            throw new PropertyException("Cannot remove property ''{0}''."ename);
        }
        return .remove(name);
    }
    private void setProperty(String propNameObject propValuethrows RRepositoryException {
        Node n = node();
        try {
            NodeUtil.smartCheckout(nfalse);
            if (propValue instanceof Date) {
                n.setProperty(propName, ((DatepropValue).getTime());
            } else if (propValue instanceof Double) {
                n.setProperty(propName, (DoublepropValue);
            } else {
                n.setProperty(propNamepropValue.toString());
            }
            n.save();
        } catch (RepositoryException e) {
            throw new RRepositoryException("Cannot set property " + propName + "."e);
        }
    }
    public void setProps(Map<StringObjectpropsthrows PropertyException {
        if (props == null) {
            return;
        }
        // do not update JCR if property wasn't changed
        /*folder props aren't save
        if (isSame(this.props, props)) {
            return;
        }
        */
        Set<StringpropNames = props.keySet();
        for (String propName : propNames) {
            Object propValue = props.get(propName);
            try {
                setProperty(propNamepropValue);
            } catch (RRepositoryException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        this. = props;
    }
    public RLock getLock() throws RRepositoryException {
        if (isOldVersion()) {
            return .;
        } else {
            try {
                return new JcrLock(node());
            } catch (RepositoryException e) {
                throw new RRepositoryException("Failed to get lock."e);
            }
        }
    }
    public boolean isLocked() throws RRepositoryException {
        return getLock().isLocked();
    }
    public void lock(CommonUser userthrows ProjectException {
        try {
            getLock().lock(user);
        } catch (RRepositoryException e) {
            throw new ProjectException(""e);
        }
    }
    public void unlock(CommonUser userthrows ProjectException {
        try {
            getLock().unlock(user);
        } catch (RRepositoryException e) {
            throw new ProjectException(""e);
        }
    }
    
    private void saveParent(Node nodethrows RepositoryException{
        Node parent = node.getParent();
        if (parent.isNew()) {
            saveParent(parent);
        } else if (parent.isModified()) {
            parent.save();
        }
    }
    public void delete(CommonUser userthrows ProjectException {
        try {
            if(isLocked()){
                unlock(user);
            }
            delete();
        } catch (Exception e) {
            throw new ProjectException("Failed to delete node."e);
        }
    }
    public ArtefactPath getArtefactPath() {
        return ;
    }
    public boolean isFolder() {
        return false;
    }
    public ProjectVersion getVersion() {
        // FIXME
        RVersion rv = getActiveVersion();
        return new RepositoryProjectVersionImpl(rvrvii);
    }
    public List<ProjectVersiongetVersions() {
        // FIXME
        LinkedList<ProjectVersionvers = new LinkedList<ProjectVersion>();
        try {
            List<RVersionverHist = getVersionHistory();
            RVersion lastVersion = verHist.get(verHist.size() - 1);
            Date modifiedAt = lastVersion.getCreated();
            String modifiedBy = lastVersion.getCreatedBy().getUserName();
            for (RVersion rv : verHist) {
                vers.add(createRepositoryProjectVersion(rvmodifiedAtmodifiedBy));
            }
        } catch (RRepositoryException e) {
            .error("Failed to get version history!"e);
            // TODO exception should be rethrown
        }
        return vers;
    }
    private RepositoryProjectVersionImpl createRepositoryProjectVersion(RVersion rvDate modifiedAtString modifiedBy) {
                .getUserName(), modifiedAtmodifiedBy);
        String versionComment = "";
        Map<StringObjectversionProperties = new HashMap<StringObject>();
        try {
            JcrEntityAPI entity = getVersion(rv);
            versionProperties = getVersionProps(rv);
            if(entity.hasProperty(.)) {
                versionComment = entity.getProperty(.).getString();
            }
        } catch (Exception e) {
            .error("Failed to get version properties!"e);
            // TODO exception should be rethrown
        }
        return new RepositoryProjectVersionImpl(rvrviiversionCommentversionProperties);
    }
    @Override
    public int getVersionsCount() {
        try {
            return getVersionHistory().size();
        } catch (RRepositoryException e) {
            .error("Failed to get version history!"e);
            // TODO exception should be rethrown
            return 0;
        }
    }
    @Override
    public ProjectVersion getVersion(int indexthrows RRepositoryException {
        List<RVersionverHist = getVersionHistory();
        RVersion lastVersion = verHist.get(verHist.size() - 1);
        Date modifiedAt = lastVersion.getCreated();
        String modifiedBy = lastVersion.getCreatedBy().getUserName();
        return createRepositoryProjectVersion(verHist.get(index), modifiedAtmodifiedBy);
    }
    public LockInfo getLockInfo() {
        // FIXME
        try {
            return getLock();
        } catch (RRepositoryException e) {
            .error("getLockInfo"e);
            return .;
        }
    }
        Node frozenNode = NodeUtil.getNode4Version(node(), version);
        Map<StringObjectversProps = new HashMap<StringObject>();
        
        for (TablePropertyDefinition prop : ) {
            String propName = prop.getName();
            
            if (frozenNode.hasProperty(propName)) {
                Value value = frozenNode.getProperty(propName).getValue();
                Object propValue = null;
                int valueType = value.getType();
                switch (valueType) {
                    case .:
                        propValue = value.getDate().getTime();
                        break;
                    case .:
                        propValue = new Date(value.getLong());
                        break;
                    case .:
                        propValue = value.getDouble();
                        break;
                    default:
                        propValue = value.getString();
                        break;
                }
                versProps.put(propNamepropValue);
            }
        }
        return versProps;
    }
    public void commit(CommonUser userint revisionthrows ProjectException {
        try {
            Node n = node();
            saveParent(n);
            NodeUtil.smartCheckout(nfalse);
            .set(revision);
            .updateVersion(n);
            n.setProperty(.user.getUserName());
            if (NodeUtil.isVersionable(n)) {
                .info("Checking in... " + n.getPath());
                n.save();
                n.checkin();
            } else {
                n.save();
                .info("Saving... " + n.getPath());
            }
        } catch (RepositoryException e) {
            throw new ProjectException("Failed to check in artefact ''{0}''!"egetPath());
        }
    }
    public JcrEntityAPI getVersion(CommonVersion versionthrows RRepositoryException{
        try {
            Node frozenNode = NodeUtil.getNode4Version(node(), version);
            return new JcrEntityAPI(frozenNodegetTransactionManager(), getArtefactPath(), true);
        } catch (RepositoryException e) {
            throw new RRepositoryException("Failed to get version for node."e);
        }
    }
    public void removeAllProperties() throws PropertyException {
        List<StringpropertyNames = new ArrayList<String>(.keySet());
        for (String propertyName : propertyNames){
            removeProperty(propertyName);
        }
        
        
        
        /*Delete all posible props*/
        try {
            for (TablePropertyDefinition prop : ) {
                String propName = prop.getName();
                
                if (node().hasProperty(propName)) {
                    removeProperty(propName);
                }
            }
        } catch(Exception e) {
            
        }
        
        try {
            for (int i = 1; i <= .i++) {
                String propName = . + i;
                
                if (node().hasProperty(propName)) {
                    removeProperty(propName);
                }
            }
        } catch(Exception e) {
            
        }
        
        .clear();
    }
    public boolean isModified() {
        //FIXME always false
        return node().isModified();
    }
        return ;
    }
        return getTransactionManager().getTransaction();
    }
    @Override
        Map<StringInheritedPropertyinhProps = new HashMap<StringInheritedProperty>();
        
        try {
            if (node().getDepth() > 3 && node().getParent() != null) {
                inhProps = getParentPropsnode().getParent());
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
        }
        return inhProps;
    }
    
    private Map<StringInheritedPropertygetParentProps(Node n) {
        Map<StringInheritedPropertyinhProps = new HashMap<StringInheritedProperty>();
        try {
            if (n.getDepth() > 3 && n.getParent() != null) {
                inhProps = getParentProps(n.getParent());
            }
            for (TablePropertyDefinition prop : ) {
                String propName = prop.getName();
                if (n.hasProperty(propName)) {
                    InheritedProperty inhProp;
                    
                    if (n instanceof JcrFolderAPI) {
                        inhProp = new InheritedProperty(getPropValueByType(propNamen), .n.getName());
                    } else {
                        inhProp = new InheritedProperty(getPropValueByType(propNamen), .n.getName());
                    }
                    
                    inhProps.put(propNameinhProp);
                }
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
        }
        return inhProps;
    }
    @Override
    public void clearModifyStatus() {
    }
    
New to GrepCode? Check out our FAQ X