001/**
002 * Copyright 2015 DuraSpace, Inc.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.fcrepo.kernel.impl.identifiers;
017
018import com.google.common.base.Converter;
019import com.hp.hpl.jena.rdf.model.Resource;
020import org.fcrepo.kernel.models.FedoraResource;
021import org.fcrepo.kernel.impl.NonRdfSourceDescriptionImpl;
022import org.fcrepo.kernel.impl.FedoraBinaryImpl;
023import org.fcrepo.kernel.impl.ContainerImpl;
024import org.fcrepo.kernel.impl.TombstoneImpl;
025
026import javax.jcr.Node;
027
028/**
029 * @author cabeer
030 * @since 10/15/14
031 */
032public class NodeResourceConverter extends Converter<Node, FedoraResource> {
033    public static final NodeResourceConverter nodeConverter = new NodeResourceConverter();
034
035    /**
036     * Get a converter that can transform a Node to a Resource
037     * @param c the given node
038     * @return the converter that can transform a node to resource
039     */
040    public static Converter<Node, Resource> nodeToResource(final Converter<Resource, FedoraResource> c) {
041        return nodeConverter.andThen(c.reverse());
042    }
043
044    @Override
045    protected FedoraResource doForward(final Node node) {
046
047        final FedoraResource fedoraResource;
048
049        if (NonRdfSourceDescriptionImpl.hasMixin(node)) {
050            fedoraResource = new NonRdfSourceDescriptionImpl(node);
051        } else if (FedoraBinaryImpl.hasMixin(node)) {
052            fedoraResource = new FedoraBinaryImpl(node);
053        } else if (TombstoneImpl.hasMixin(node)) {
054            fedoraResource = new TombstoneImpl(node);
055        } else {
056            fedoraResource = new ContainerImpl(node);
057        }
058
059        return fedoraResource;
060    }
061
062    @Override
063    protected Node doBackward(final FedoraResource resource) {
064        return resource.getNode();
065    }
066}