abstractvisprovider.java

来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 499 行 · 第 1/2 页

JAVA
499
字号
     * {@inheritDoc}     */    public VirtualPropertyState createPropertyState(VirtualNodeState parent,                                                    QName name, int type,                                                    boolean multiValued)            throws RepositoryException {        PropDef def = getApplicablePropertyDef(parent, name, type, multiValued);        PropertyId id = new PropertyId(parent.getNodeId(), name);        VirtualPropertyState prop = new VirtualPropertyState(id);        prop.setType(type);        prop.setMultiValued(multiValued);        prop.setDefinitionId(def.getId());        return prop;    }    /**     * {@inheritDoc}     */    public VirtualNodeState createNodeState(VirtualNodeState parent, QName name,                                            NodeId id, QName nodeTypeName)            throws RepositoryException {        NodeDefId def;        try {            def = getApplicableChildNodeDef(parent, name, nodeTypeName).getId();        } catch (RepositoryException re) {            // hack, use nt:unstructured as parent            NodeTypeRegistry ntReg = getNodeTypeRegistry();            EffectiveNodeType ent = ntReg.getEffectiveNodeType(QName.NT_UNSTRUCTURED);            NodeDef cnd = ent.getApplicableChildNodeDef(name, nodeTypeName, ntReg);            ntReg.getNodeDef(cnd.getId());            def = cnd.getId();        }        // create a new node state        VirtualNodeState state;        if (id == null) {            id = new NodeId(UUID.randomUUID());        }        state = new VirtualNodeState(this, parent.getNodeId(), id, nodeTypeName, new QName[0]);        state.setDefinitionId(def);        cache(state);        return state;    }    /**     * {@inheritDoc}     */    public void addListener(ItemStateListener listener) {        synchronized (listeners) {            assert (!listeners.contains(listener));            listeners.add(listener);        }    }    /**     * {@inheritDoc}     */    public void removeListener(ItemStateListener listener) {        synchronized (listeners) {            listeners.remove(listener);        }    }    /**     * returns the node type manager     *     * @return the node type manager     */    protected NodeTypeRegistry getNodeTypeRegistry() {        return ntReg;    }    /**     * adds the node state to the cache     *     * @param state     */    protected NodeState cache(NodeState state) {        if (state != null) {            nodes.put(state);            log.debug("item added to cache. size=" + nodes.size());        }        return state;    }    /**     * removes the node state from the cache     *     * @param id     */    protected void evict(NodeId id) {        nodes.remove(id);    }    /**     * invalidates the item     *     * @param id     */    public void invalidateItem(ItemId id, boolean recursive) {        VirtualNodeState state = id.equals(rootNodeId) ? root : (VirtualNodeState) nodes.get(id);        if (state != null) {            if (recursive) {                VirtualPropertyState[] props = state.getProperties();                for (int i = 0; i < props.length; i++) {                    props[i].notifyStateUpdated();                }                Iterator iter = state.getChildNodeEntries().iterator();                while (iter.hasNext()) {                    NodeState.ChildNodeEntry pe = (NodeState.ChildNodeEntry) iter.next();                    invalidateItem(pe.getId(), true);                }            }            state.notifyStateUpdated();        }    }    /**     * retrieves the property definition for the given contraints     *     * @param propertyName     * @param type     * @param multiValued     * @return     * @throws RepositoryException     */    protected PropDef getApplicablePropertyDef(NodeState parent, QName propertyName,                                               int type, boolean multiValued)            throws RepositoryException {        return getEffectiveNodeType(parent).getApplicablePropertyDef(propertyName, type, multiValued);    }    /**     * Retrieves the node definition for the given contraints.     *     * @param nodeName     * @param nodeTypeName     * @return     * @throws RepositoryException     */    protected NodeDef getApplicableChildNodeDef(NodeState parent, QName nodeName, QName nodeTypeName)            throws RepositoryException {        return getEffectiveNodeType(parent).getApplicableChildNodeDef(                nodeName, nodeTypeName, getNodeTypeRegistry());    }    /**     * Returns the effective (i.e. merged and resolved) node type representation     * of this node's primary and mixin node types.     *     * @return the effective node type     * @throws RepositoryException     */    protected EffectiveNodeType getEffectiveNodeType(NodeState parent) throws RepositoryException {        // build effective node type of mixins & primary type        NodeTypeRegistry ntReg = getNodeTypeRegistry();        // existing mixin's        HashSet set = new HashSet(parent.getMixinTypeNames());        // primary type        set.add(parent.getNodeTypeName());        try {            return ntReg.getEffectiveNodeType((QName[]) set.toArray(new QName[set.size()]));        } catch (NodeTypeConflictException ntce) {            String msg = "internal error: failed to build effective node type for node " + parent.getNodeId();            throw new RepositoryException(msg, ntce);        }    }    /**     * {@inheritDoc}     */    public void stateCreated(ItemState created) {        ItemStateListener[] la;        synchronized (listeners) {            la = (ItemStateListener[]) listeners.toArray(new ItemStateListener[listeners.size()]);        }        for (int i = 0; i < la.length; i++) {            if (la[i] != null) {                la[i].stateCreated(created);            }        }    }    /**     * {@inheritDoc}     */    public void stateModified(ItemState modified) {        ItemStateListener[] la;        synchronized (listeners) {            la = (ItemStateListener[]) listeners.toArray(new ItemStateListener[listeners.size()]);        }        for (int i = 0; i < la.length; i++) {            if (la[i] != null) {                la[i].stateModified(modified);            }        }    }    /**     * {@inheritDoc}     */    public void stateDestroyed(ItemState destroyed) {        if (destroyed.isNode() && destroyed.getId().equals(rootNodeId)) {            try {                root = createRootNodeState();            } catch (RepositoryException e) {                // ignore            }        }        evict((NodeId) destroyed.getId());        ItemStateListener[] la;        synchronized (listeners) {            la = (ItemStateListener[]) listeners.toArray(new ItemStateListener[listeners.size()]);        }        for (int i = 0; i < la.length; i++) {            if (la[i] != null) {                la[i].stateDestroyed(destroyed);            }        }    }    /**     * {@inheritDoc}     */    public void stateDiscarded(ItemState discarded) {        if (discarded.isNode() && discarded.getId().equals(rootNodeId)) {            try {                root = createRootNodeState();            } catch (RepositoryException e) {                // ignore            }        }        evict((NodeId) discarded.getId());        ItemStateListener[] la;        synchronized (listeners) {            la = (ItemStateListener[]) listeners.toArray(new ItemStateListener[listeners.size()]);        }        for (int i = 0; i < la.length; i++) {            if (la[i] != null) {                la[i].stateDiscarded(discarded);            }        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?