Package org.apache.jackrabbit.core.state

Source Code of org.apache.jackrabbit.core.state.ItemStateMap

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.core.state;

import org.apache.jackrabbit.core.ItemId;
import org.apache.jackrabbit.core.util.Dumpable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.PrintStream;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
* A {@link java.util.Map} based <code>ItemStateStore</code> implementation.
*/
public class ItemStateMap implements ItemStateStore, Dumpable {

    /** Logger instance */
    private static Logger log = LoggerFactory.getLogger(ItemStateMap.class);

    /**
     * the map backing this <code>ItemStateStore</code> implementation
     */
    protected final Map map;

    /**
     * Creates a new HashMap-backed <code>ItemStateStore</code> implementation.
     */
    public ItemStateMap() {
        this(new HashMap());
    }

    /**
     * Protected constructor for specialized subclasses
     *
     * @param map <code>Map</code> implementation to be used as backing store.
     */
    protected ItemStateMap(Map map) {
        this.map = map;
    }

    //-------------------------------------------------------< ItemStateStore >
    /**
     * {@inheritDoc}
     */
    public boolean contains(ItemId id) {
        return map.containsKey(id);
    }

    /**
     * {@inheritDoc}
     */
    public ItemState get(ItemId id) {
        return (ItemState) map.get(id);
    }

    /**
     * {@inheritDoc}
     */
    public void put(ItemState state) {
        ItemId id = state.getId();
        if (map.containsKey(id)) {
            log.warn("overwriting map entry " + id);
        }
        map.put(id, state);
    }

    /**
     * {@inheritDoc}
     */
    public void remove(ItemId id) {
        map.remove(id);
    }

    /**
     * {@inheritDoc}
     */
    public void clear() {
        map.clear();
    }

    /**
     * {@inheritDoc}
     */
    public boolean isEmpty() {
        return map.isEmpty();
    }

    /**
     * {@inheritDoc}
     */
    public int size() {
        return map.size();
    }

    /**
     * {@inheritDoc}
     */
    public Set keySet() {
        return Collections.unmodifiableSet(map.keySet());
    }

    /**
     * {@inheritDoc}
     */
    public Collection values() {
        return Collections.unmodifiableCollection(map.values());
    }

    //-------------------------------------------------------------< Dumpable >
    /**
     * {@inheritDoc}
     */
    public void dump(PrintStream ps) {
        ps.println("map entries:");
        ps.println();
        Iterator iter = keySet().iterator();
        while (iter.hasNext()) {
            ItemId id = (ItemId) iter.next();
            ItemState state = get(id);
            dumpItemState(id, state, ps);
        }
    }

    private void dumpItemState(ItemId id, ItemState state, PrintStream ps) {
        ps.print(state.isNode() ? "Node: " : "Prop: ");
        switch (state.getStatus()) {
            case ItemState.STATUS_EXISTING:
                ps.print("[existing]           ");
                break;
            case ItemState.STATUS_EXISTING_MODIFIED:
                ps.print("[existing, modified] ");
                break;
            case ItemState.STATUS_EXISTING_REMOVED:
                ps.print("[existing, removed]  ");
                break;
            case ItemState.STATUS_NEW:
                ps.print("[new]                ");
                break;
            case ItemState.STATUS_STALE_DESTROYED:
                ps.print("[stale, destroyed]   ");
                break;
            case ItemState.STATUS_STALE_MODIFIED:
                ps.print("[stale, modified]    ");
                break;
            case ItemState.STATUS_UNDEFINED:
                ps.print("[undefined]          ");
                break;
        }
        ps.println(id + " (" + state + ")");
    }
}
TOP

Related Classes of org.apache.jackrabbit.core.state.ItemStateMap

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.