001/*
002 * (C) Copyright 2006-2010 Nuxeo SA (http://nuxeo.com/) and contributors.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Thierry Delprat
016 */
017package org.nuxeo.apidoc.adapters;
018
019import org.nuxeo.apidoc.api.BundleGroup;
020import org.nuxeo.apidoc.api.BundleInfo;
021import org.nuxeo.apidoc.api.ComponentInfo;
022import org.nuxeo.apidoc.api.DocumentationItem;
023import org.nuxeo.apidoc.api.ExtensionInfo;
024import org.nuxeo.apidoc.api.ExtensionPointInfo;
025import org.nuxeo.apidoc.api.NuxeoArtifact;
026import org.nuxeo.apidoc.api.OperationInfo;
027import org.nuxeo.apidoc.api.SeamComponentInfo;
028import org.nuxeo.apidoc.api.ServiceInfo;
029import org.nuxeo.apidoc.documentation.DocumentationItemDocAdapter;
030import org.nuxeo.apidoc.repository.RepositoryDistributionSnapshot;
031import org.nuxeo.apidoc.snapshot.DistributionSnapshot;
032import org.nuxeo.ecm.core.api.DocumentModel;
033import org.nuxeo.ecm.core.api.adapter.DocumentAdapterFactory;
034
035/**
036 * Factory for DocumentModel adapters.
037 */
038public class AdapterFactory implements DocumentAdapterFactory {
039
040    @Override
041    public Object getAdapter(DocumentModel doc, Class<?> adapterClass) {
042
043        if (doc == null) {
044            return null;
045        }
046
047        String adapterClassName = adapterClass.getSimpleName();
048
049        if (adapterClassName.equals(BundleGroup.class.getSimpleName())) {
050            if (doc.getType().equals(BundleGroup.TYPE_NAME)) {
051                return new BundleGroupDocAdapter(doc);
052            }
053        }
054
055        if (adapterClassName.equals(BundleInfo.class.getSimpleName())) {
056            if (doc.getType().equals(BundleInfo.TYPE_NAME)) {
057                return new BundleInfoDocAdapter(doc);
058            }
059        }
060
061        if (adapterClassName.equals(ComponentInfo.class.getSimpleName())) {
062            if (doc.getType().equals(ComponentInfo.TYPE_NAME)) {
063                return new ComponentInfoDocAdapter(doc);
064            }
065        }
066
067        if (adapterClassName.equals(ExtensionPointInfo.class.getSimpleName())) {
068            if (doc.getType().equals(ExtensionPointInfo.TYPE_NAME)) {
069                return new ExtensionPointInfoDocAdapter(doc);
070            }
071        }
072
073        if (adapterClassName.equals(ExtensionInfo.class.getSimpleName())) {
074            if (doc.getType().equals(ExtensionInfo.TYPE_NAME)) {
075                return new ExtensionInfoDocAdapter(doc);
076            }
077        }
078
079        if (adapterClassName.equals(DistributionSnapshot.class.getSimpleName())) {
080            if (doc.getType().equals(DistributionSnapshot.TYPE_NAME)) {
081                return new RepositoryDistributionSnapshot(doc);
082            }
083        }
084
085        if (adapterClassName.equals(DocumentationItem.class.getSimpleName())) {
086            if (doc.getType().equals(DocumentationItem.TYPE_NAME)) {
087                return new DocumentationItemDocAdapter(doc);
088            }
089        }
090
091        if (adapterClassName.equals(ServiceInfo.class.getSimpleName())) {
092            if (doc.getType().equals(ServiceInfo.TYPE_NAME)) {
093                return new ServiceInfoDocAdapter(doc);
094            }
095        }
096
097        if (adapterClassName.equals(SeamComponentInfo.class.getSimpleName())) {
098            if (doc.getType().equals(SeamComponentInfo.TYPE_NAME)) {
099                return new SeamComponentInfoDocAdapter(doc);
100            }
101        }
102
103        if (adapterClassName.equals(OperationInfo.class.getSimpleName())) {
104            if (doc.getType().equals(OperationInfo.TYPE_NAME)) {
105                return new OperationInfoDocAdapter(doc);
106            }
107        }
108
109        if (adapterClassName.equals(NuxeoArtifact.class.getSimpleName())) {
110            if (doc.getType().equals(ServiceInfo.TYPE_NAME)) {
111                return new ServiceInfoDocAdapter(doc);
112            }
113            if (doc.getType().equals(ExtensionInfo.TYPE_NAME)) {
114                return new ExtensionInfoDocAdapter(doc);
115            }
116            if (doc.getType().equals(ExtensionPointInfo.TYPE_NAME)) {
117                return new ExtensionPointInfoDocAdapter(doc);
118            }
119            if (doc.getType().equals(ComponentInfo.TYPE_NAME)) {
120                return new ComponentInfoDocAdapter(doc);
121            }
122            if (doc.getType().equals(BundleInfo.TYPE_NAME)) {
123                return new BundleInfoDocAdapter(doc);
124            }
125            if (doc.getType().equals(BundleGroup.TYPE_NAME)) {
126                return new BundleGroupDocAdapter(doc);
127            }
128            if (doc.getType().equals(SeamComponentInfo.TYPE_NAME)) {
129                return new SeamComponentInfoDocAdapter(doc);
130            }
131            if (doc.getType().equals(OperationInfo.TYPE_NAME)) {
132                return new OperationInfoDocAdapter(doc);
133            }
134        }
135
136        return null;
137    }
138
139}