Author: fmui
Date: Tue Mar 17 10:04:03 2015
New Revision: 1667226

URL: http://svn.apache.org/r1667226
Log:
CMIS-900: added create type example

Added:
    chemistry/site/trunk/content/java/examples/example-create-type.mdtext   
(with props)
Modified:
    chemistry/site/trunk/content/java/examples/index.mdtext

Added: chemistry/site/trunk/content/java/examples/example-create-type.mdtext
URL: 
http://svn.apache.org/viewvc/chemistry/site/trunk/content/java/examples/example-create-type.mdtext?rev=1667226&view=auto
==============================================================================
--- chemistry/site/trunk/content/java/examples/example-create-type.mdtext 
(added)
+++ chemistry/site/trunk/content/java/examples/example-create-type.mdtext Tue 
Mar 17 10:04:03 2015
@@ -0,0 +1,838 @@
+Title:     Create Type
+Notice:    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.
+
+# Creating a type
+
+Java command-line example using the CMIS 1.1 type mutability feature.
+
+    :::java
+    package typeMutability.enabled;
+    
+    import java.io.FileInputStream;
+    import java.io.FileNotFoundException;
+    import java.io.IOException;
+    import java.math.BigInteger;
+    import java.util.ArrayList;
+    import java.util.HashMap;
+    import java.util.LinkedHashMap;
+    import java.util.LinkedList;
+    import java.util.List;
+    import java.util.Map;
+    import java.util.Map.Entry;
+    import java.util.Properties;
+    
+    import org.apache.chemistry.opencmis.client.api.ObjectType;
+    import org.apache.chemistry.opencmis.client.api.Repository;
+    import org.apache.chemistry.opencmis.client.api.Session;
+    import org.apache.chemistry.opencmis.client.api.SessionFactory;
+    import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
+    import org.apache.chemistry.opencmis.commons.SessionParameter;
+    import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
+    import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
+    import org.apache.chemistry.opencmis.commons.definitions.Choice;
+    import 
org.apache.chemistry.opencmis.commons.definitions.DocumentTypeDefinition;
+    import 
org.apache.chemistry.opencmis.commons.definitions.PropertyBooleanDefinition;
+    import 
org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
+    import 
org.apache.chemistry.opencmis.commons.definitions.PropertyIdDefinition;
+    import 
org.apache.chemistry.opencmis.commons.definitions.PropertyIntegerDefinition;
+    import 
org.apache.chemistry.opencmis.commons.definitions.PropertyStringDefinition;
+    import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
+    import org.apache.chemistry.opencmis.commons.definitions.TypeMutability;
+    import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
+    import org.apache.chemistry.opencmis.commons.enums.Cardinality;
+    import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
+    import org.apache.chemistry.opencmis.commons.enums.PropertyType;
+    import org.apache.chemistry.opencmis.commons.enums.Updatability;
+    import 
org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+    
+    import typeMutability.util.TestStringChoice;
+    
+    /* 
+     * Licensed 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.
+     *
+     *
+     * This code is based on the Apache Chemistry OpenCMIS FileShare project
+     * 
<http://chemistry.apache.org/java/developing/repositories/dev-repositories-fileshare.html>.
+     *
+     * This code is part of a training exercise and not intended for 
production use!
+     *
+     */
+    
+    /**
+     * Running this test requires an input file containing the connection 
+     * properties for your CMIS server. 
+     *
+     * The default/static location is /temp/cmis.properties
+     * and is hard coded in the main() method. 
+     * See the loadConnectionProperties() call if you 
+     * need to change this location or make it dynamic. 
+     * 
+     * Example format for a typical cmis.properties file:
+     * You can also refer to the properties section in the 
+     * Workbench page here:
+     * 
http://chemistry.apache.org/java/developing/tools/dev-tools-workbench.html
+     * 
+     * ******************************************
+     * SAMPLE cmis.properties *******************
+     * ******************************************
+     * 
+     *     org.apache.chemistry.opencmis.binding.spi.type=browser
+     *     org.apache.chemistry.opencmis
+     *     
org.apache.chemistry.opencmis.binding.browser.url=http://localhost:8080/openfncmis/browser
+     *     org.apache.chemistry.opencmis.user=username_here
+     *     org.apache.chemistry.opencmis.password=password_here
+     *     org.apache.chemistry.opencmis.binding.compression=true
+     *     org.apache.chemistry.opencmis.binding.cookies=true
+     * 
+     */
+    
+    /*
+     * This class serves as a simple example of how to create a new 
TypeDefinintion
+     * in CMIS using the OpenCMIS client. (all in one self contained file) 
This code
+     * was tested with the FileNet CMIS 1.1 tech preview but can be modified 
to work
+     * with any CMIS client that supports type mutability.
+     * 
+     * Code will create a new subclass of cmis:document with 4 properties 
+     * String, Int, Boolean and Id, and two choice list values on the String 
prop
+     */
+    public class CreateTestCommandLine {
+    
+        // Modify these values to conform to your local repository requirements
+        //
+        // property id's and names here 
+        private static final String property_stringPropertyId = 
"StringPropertyDefinition";
+        private static final String property_intPropertyId = 
"IntPropertyDefinition";
+        private static final String property_boolPropertyId = 
"BoolPropertyDefinition";
+        private static final String property_idPropertyId = 
"IdPropertyDefinition";
+    
+        //
+        // type related
+        // the id of the new type's parent
+        private static final String type_idOfParentType = "cmis:document";
+        // Id of the new subclass we will be creating
+        private static final String type_idOfNewClass = "cmis_newDocSubclass1";
+        // other information about type
+        private static final String type_description = "Test document type 
definition";
+        private static final String type_displayName = "TestTypeDefinition";
+        private static final String type_localName = "some test local name";
+        private static final String type_localNamespace = "some test local 
name space";
+    
+        // globals
+        private static Session session = null;
+    
+        public static void main(String[] args) {
+    
+            System.out.println("An example of type creation with CMIS 
TypeMutability from OpenCMIS.");
+    
+            // Assume /cmis.properties is the name of the input file 
containing all
+            // of the session parameters (test only)
+            Map<String, String> parameters = 
loadConnectionProperties("/temp/cmis.properties");
+    
+            session = getSession(parameters);
+    
+            // Look at repository info - demonstrates a valid connection
+            RepositoryInfo repositoryInfo = session.getRepositoryInfo();
+            System.out.println("Connected to repository.  Supports CMIS 
version:"
+                    + repositoryInfo.getCmisVersionSupported());
+    
+            
+            // Check here to verify the types we will be creating are 
permissible 
+            // for this repository.
+            Boolean canCreateStringProperty = false;
+            Boolean canCreateIdProperty = false;
+            Boolean canCreateBoolProperty = false;
+            Boolean canCreateIntProperty = false;
+            for (PropertyType propCreatable : 
repositoryInfo.getCapabilities().getCreatablePropertyTypes().canCreate()) {
+    
+                if (propCreatable.equals(PropertyType.STRING)) {
+                    canCreateStringProperty = true;
+                } else if (propCreatable.equals(PropertyType.INTEGER)) {
+                    canCreateIntProperty = true;
+                } else if (propCreatable.equals(PropertyType.ID)) {
+                    canCreateIdProperty = true;
+                } else if (propCreatable.equals(PropertyType.BOOLEAN)) {
+                    canCreateBoolProperty = true;
+                }
+               
+                System.out.println("Repository can create property of : " + 
propCreatable.toString());
+            }
+           
+            assert canCreateStringProperty: "String is not one of the 
createable properties.";
+            assert canCreateIdProperty: "Id is not one of the createable 
properties.";
+            assert canCreateBoolProperty: "Boolean is not one of the 
createable properties.";
+            assert canCreateIntProperty: "Integer is not one of the createable 
properties.";
+    
+            // Create new type with string property
+            // and verify it exists in type collection
+            ObjectType newType = createNewType();
+    
+            // clean up the type if permitted
+            // TODO - check to see if delete is permitted first...
+            session.deleteType(newType.getId());
+    
+            // TODO - verify delete here for completeness.
+            System.out.println("Cleanup completed.");
+        }
+    
+        /**
+         * Create the new type with with our 4 test property types.
+         * 
+         * @return
+         */
+        public static ObjectType createNewType() {
+            // assuming the following default (change if your repository
+            // does not support these settings
+            Boolean isCreatable = true;
+            Boolean includedInSupertypeQuery = true;
+            Boolean queryable = true;
+            ContentStreamAllowed contentStreamAllowed = 
ContentStreamAllowed.ALLOWED;
+            Boolean versionable = false;
+    
+            // build property definitions - string, int, boolean and id
+            Map<String, PropertyDefinition<?>> propertyDefinitions = new 
LinkedHashMap<String, PropertyDefinition<?>>();
+            TestStringPropertyDefinition spd = 
createStringPropertyDefinition();
+            TestIntegerPropertyDefinition ipd = createIntPropertyDefinition();
+            TestBooleanPropertyDefinition bpd = 
createBooleanPropertyDefinition();
+            TestIdPropertyDefinition idpd = createIDPropertyDefinition();
+    
+            propertyDefinitions.put(spd.getId(), spd);
+            propertyDefinitions.put(ipd.getId(), ipd);
+            propertyDefinitions.put(bpd.getId(), bpd);
+            propertyDefinitions.put(idpd.getId(), idpd);
+    
+            TestDocumentTypeDefinition typeToCreate = new 
TestDocumentTypeDefinition(type_idOfNewClass, type_description,
+                    type_displayName, type_localName, type_localNamespace, 
type_idOfParentType, isCreatable,
+                    includedInSupertypeQuery, queryable, contentStreamAllowed, 
versionable, propertyDefinitions);
+    
+            TypeDefinition createdType = null;
+            try {
+                createdType = session.createType(typeToCreate);
+                System.out.println("Type created: " + createdType.toString());
+            } catch (Exception e) {
+                assert false: "An exception was thrown when trying to create a 
new type definition. Message: " + e.getMessage();
+            }
+    
+            ObjectType retrievedType = null;
+            try {
+                retrievedType = session.getTypeDefinition(createdType.getId());
+                assert retrievedType != null: "Unable to retrieve new type. ";
+            } catch (Exception e) {
+                assert false: "Got exception. Cannot get the type definition 
from the repository. Message: " + e.getMessage();
+            }
+    
+            return retrievedType;
+        }
+    
+        public static Session getSession(Map<String, String> parameters) {
+            Session session = null;
+    
+            SessionFactory factory = SessionFactoryImpl.newInstance();
+            if (parameters.containsKey(SessionParameter.REPOSITORY_ID)) {
+                session = factory.createSession(parameters);
+            } else {
+                // Create session for the first repository.
+                List<Repository> repositories = 
factory.getRepositories(parameters);
+                session = repositories.get(0).createSession();
+            }
+    
+            // reset op context to default
+            session.setDefaultContext(session.createOperationContext());
+    
+            return session;
+        }
+    
+        /*
+         * Load our connection properties from a local file
+         * 
+         * Note file should use the same format as the expert settings for 
Workbench
+         */
+        public static final Map<String, String> 
loadConnectionProperties(String configResource) {
+            Properties testConfig = new Properties();
+            if (configResource == null) {
+                throw new CmisRuntimeException("Filename with connection 
parameters was not supplied.");
+            }
+    
+            FileInputStream inStream;
+            try {
+                inStream = new FileInputStream(configResource);
+                testConfig.load(inStream);
+                inStream.close();
+            } catch (FileNotFoundException e1) {
+                throw new CmisRuntimeException("Test properties file '" + 
configResource + "' was not found at:"
+                        + configResource);
+            } catch (IOException e) {
+                throw new CmisRuntimeException("Exception loading test 
properties file " + configResource, e);
+            }
+    
+            Map<String, String> map = new HashMap<String, String>();
+            for (Entry<?, ?> entry : testConfig.entrySet()) {
+                System.out.println("Found key: " + entry.getKey() + " Value:" 
+ entry.getValue());
+                map.put((String) entry.getKey(), ((String) 
entry.getValue()).trim());
+            }
+            return map;
+        }
+    
+        /**
+         * Create a single string property definition with a choice list
+         */
+        private static TestStringPropertyDefinition 
createStringPropertyDefinition() {
+        
+            Cardinality cardinality = Cardinality.SINGLE;
+            String description = "String property definition";
+            String displayName = "StringPropertyDefinition";
+            String localName = "StringPropertyDefinition";
+            String localNameSpace = "StringPropertyDefinition";    
+            Updatability updatability = Updatability.READWRITE;
+            Boolean orderable = false;
+            Boolean queryable = false;
+            ArrayList<String> defaults = new ArrayList<String>();
+            defaults.add("test");
+    
+            List<String> vals1 = new LinkedList<String>();
+            vals1.add("val1");
+    
+            List<String> vals2 = new LinkedList<String>();
+            vals2.add("val2");
+    
+            TestStringChoice strChoice1 = new TestStringChoice("choice1", 
vals1, null);
+            TestStringChoice strChoice2 = new TestStringChoice("choice2", 
vals2, null);
+            List<Choice<String>> choiceList = new LinkedList<Choice<String>>();
+            choiceList.add (strChoice1);
+            choiceList.add (strChoice2);
+    
+            TestStringPropertyDefinition spd = new 
TestStringPropertyDefinition(property_stringPropertyId, cardinality, 
+                    description, displayName, localName, localNameSpace, 
updatability, orderable, queryable, 
+                    defaults, choiceList, null);
+    
+            return spd;      
+        }
+    
+        private static TestIntegerPropertyDefinition 
createIntPropertyDefinition() {
+            Cardinality cardinality = Cardinality.MULTI;
+            String description = "Int property definition";
+            String displayName = "IntPropertyDefinition";
+            String localName = "IntPropertyDefinition";
+            String localNameSpace = "IntPropertyDefinition";
+            Updatability updatability = Updatability.READWRITE;
+            Boolean orderable = false;
+            Boolean queryable = false;
+            ArrayList<BigInteger> defaults = new ArrayList<BigInteger>();
+            // defaults.add(new BigInteger("101"));
+            BigInteger minVal = new BigInteger("100");
+            BigInteger maxVal = new BigInteger("1000");
+    
+            TestIntegerPropertyDefinition ipd = new 
TestIntegerPropertyDefinition(property_intPropertyId, cardinality,
+                    description, displayName, localName, localNameSpace, 
updatability, orderable, queryable, defaults,
+                    minVal, maxVal, null);
+            return ipd;
+        }
+    
+        private static TestBooleanPropertyDefinition 
createBooleanPropertyDefinition() {
+    
+            Cardinality cardinality = Cardinality.SINGLE;
+            String description = "Boolean property definition";
+            String displayName = "BooleanPropertyDefinition";
+            String localName = "BooleanPropertyDefinition";
+            String localNameSpace = "BooleanPropertyDefinition";
+            Updatability updatability = Updatability.ONCREATE;
+            Boolean orderable = false;
+            Boolean queryable = false;
+            ArrayList<Boolean> defaults = new ArrayList<Boolean>();
+            defaults.add(false);
+    
+            TestBooleanPropertyDefinition spd = new 
TestBooleanPropertyDefinition(property_boolPropertyId, cardinality,
+                    description, displayName, localName, localNameSpace, 
updatability, orderable, queryable, defaults);
+            return spd;
+        }
+    
+        private static TestIdPropertyDefinition createIDPropertyDefinition() {
+            Cardinality cardinality = Cardinality.SINGLE;
+            String description = "ID property definition";
+            String displayName = "IDPropertyDefinition";
+            String localName = "IDPropertyDefinition";
+            String localNameSpace = "IDPropertyDefinition";
+            Updatability updatability = Updatability.READWRITE;
+            Boolean orderable = false;
+            Boolean queryable = false;
+    
+            TestIdPropertyDefinition idpd = new 
TestIdPropertyDefinition(property_idPropertyId, cardinality, description,
+                    displayName, localName, localNameSpace, updatability, 
orderable, queryable, null);
+            return idpd;
+        }
+    
+        /**
+         * 
**************************************************************************
+         * Inner classes follow
+         * 
**************************************************************************
+         * 
+         * All of the abstract base classes (for properties and types) 
+         * that are used in this example are defined here
+         * along with their subclasses for each type that we support in this 
example.
+         * 
+         * These classes can be further extended and reused for additional 
type 
+         * mutability operations. 
+         * 
+         * These were made inner classes so the entire example would be 
contained
+         * in a single Java file. (no design reason) 
+         * 
+         */
+    
+        private static class TestStringPropertyDefinition extends 
TestPropertyDefinition<String> implements
+                PropertyStringDefinition {
+    
+            BigInteger maxLength = null;
+    
+            public TestStringPropertyDefinition(String idAndQueryName, 
Cardinality cardinality, String description,
+                    String displayName, String localName, String 
localNameSpace, Updatability updatability,
+                    Boolean orderable, Boolean queryable, List<String> 
defaultValue, List<Choice<String>> choiceList,
+                    BigInteger maxLength) {
+                super(idAndQueryName, cardinality, description, displayName, 
localName, localNameSpace, updatability,
+                        orderable, queryable, defaultValue, choiceList);
+    
+                this.maxLength = maxLength;
+            }
+    
+            @Override
+            public PropertyType getPropertyType() {
+                return PropertyType.STRING;
+            }
+    
+            @Override
+            public BigInteger getMaxLength() {
+                return maxLength;
+            }
+    
+        }
+    
+        private static class TestIntegerPropertyDefinition extends 
TestPropertyDefinition<BigInteger> implements
+                PropertyIntegerDefinition {
+    
+            private BigInteger minVal = null;
+            private BigInteger maxVal = null;
+    
+            public TestIntegerPropertyDefinition(String idAndQueryName, 
Cardinality cardinality, String description,
+                    String displayName, String localName, String 
localNameSpace, Updatability updatability,
+                    Boolean orderable, Boolean queryable, List<BigInteger> 
defaultValue, BigInteger minVal,
+                    BigInteger maxVal, List<Choice<BigInteger>> choiceList) {
+                super(idAndQueryName, cardinality, description, displayName, 
localName, localNameSpace, updatability,
+                        orderable, queryable, defaultValue, choiceList);
+    
+                this.minVal = minVal;
+                this.maxVal = maxVal;
+            }
+    
+            @Override
+            public PropertyType getPropertyType() {
+                return PropertyType.INTEGER;
+            }
+    
+            @Override
+            public BigInteger getMaxValue() {
+                return this.maxVal;
+            }
+    
+            @Override
+            public BigInteger getMinValue() {
+                return this.minVal;
+            }
+        }
+    
+        private static class TestBooleanPropertyDefinition extends 
TestPropertyDefinition<Boolean> implements
+                PropertyBooleanDefinition {
+    
+            public TestBooleanPropertyDefinition(String idAndQueryName, 
Cardinality cardinality, String description,
+                    String displayName, String localName, String 
localNameSpace, Updatability updatability,
+                    Boolean orderable, Boolean queryable, List<Boolean> 
defaultValue) {
+    
+                super(idAndQueryName, cardinality, description, displayName, 
localName, localNameSpace, updatability,
+                        orderable, queryable, defaultValue, null);
+            }
+    
+            @Override
+            public PropertyType getPropertyType() {
+                return PropertyType.BOOLEAN;
+            }
+        }
+    
+        private static class TestIdPropertyDefinition extends 
TestPropertyDefinition<String> implements
+                PropertyIdDefinition {
+    
+            public TestIdPropertyDefinition(String idAndQueryName, Cardinality 
cardinality, String description,
+                    String displayName, String localName, String 
localNameSpace, Updatability updatability,
+                    Boolean orderable, Boolean queryable, List<String> 
defaultValue) {
+                super(idAndQueryName, cardinality, description, displayName, 
localName, localNameSpace, updatability,
+                        orderable, queryable, defaultValue, null);
+            }
+    
+            @Override
+            public PropertyType getPropertyType() {
+                return PropertyType.ID;
+            }
+    
+        }
+    
+        /** 
+         * Base class for all property definition types
+         * 
+         * See TestStringPropertyDefinition for example of how to subclass 
this.
+         *
+         * @param <T>
+         */
+        abstract private static class TestPropertyDefinition<T> implements 
PropertyDefinition<T> {
+    
+            private String idAndQueryName = null;
+            private Cardinality cardinality = null;
+            private String description = null;
+            private String displayName = null;
+            private String localName = null;
+            private String localNameSpace = null;
+            private Updatability updatability = null;
+            private Boolean orderable = null;
+            private Boolean queryable = null;
+    
+            private List<T> defaultValue = null;
+            private List<Choice<T>> choiceList = null;
+    
+            public TestPropertyDefinition(String idAndQueryName, Cardinality 
cardinality, String description,
+                    String displayName, String localName, String 
localNameSpace, Updatability updatability,
+                    Boolean orderable, Boolean queryable, List<T> 
defaultValue, List<Choice<T>> choiceList) {
+                super();
+                this.idAndQueryName = idAndQueryName;
+                this.cardinality = cardinality;
+                this.description = description;
+                this.displayName = displayName;
+                this.localName = localName;
+                this.localNameSpace = localNameSpace;
+                this.updatability = updatability;
+                this.orderable = orderable;
+                this.queryable = queryable;
+                this.defaultValue = defaultValue;
+                this.choiceList = choiceList;
+            }
+    
+            @Override
+            public String getId() {
+                return idAndQueryName;
+            }
+    
+            @Override
+            public Cardinality getCardinality() {
+                return cardinality;
+            }
+    
+            @Override
+            public String getDescription() {
+                return description;
+            }
+    
+            @Override
+            public String getDisplayName() {
+                return displayName;
+            }
+    
+            @Override
+            public String getLocalName() {
+                return localName;
+            }
+    
+            @Override
+            public String getLocalNamespace() {
+                return localNameSpace;
+            }
+    
+            @Override
+            abstract public PropertyType getPropertyType();
+    
+            @Override
+            public String getQueryName() {
+                return idAndQueryName;
+            }
+    
+            @Override
+            public Updatability getUpdatability() {
+                return updatability;
+            }
+    
+            @Override
+            public Boolean isOrderable() {
+                return orderable;
+            }
+    
+            @Override
+            public Boolean isQueryable() {
+                return queryable;
+            }
+    
+            // methods with static content
+    
+            @Override
+            public List<Choice<T>> getChoices() {
+                return this.choiceList;
+            }
+    
+            @Override
+            public List<T> getDefaultValue() {
+                return this.defaultValue;
+            }
+    
+            
+            /**
+             * TODO For these remaining attributes you will want to set them 
+             * accordingly.  They are all set to static values only 
+             * because this is sample code. 
+             */
+            @Override
+            public Boolean isInherited() {
+                return false;
+            }
+    
+            @Override
+            public Boolean isOpenChoice() {
+                return false;
+            }
+    
+            @Override
+            public Boolean isRequired() {
+                return false;
+            }
+    
+            @Override
+            public List<CmisExtensionElement> getExtensions() {
+                return null;
+            }
+    
+            @Override
+            public void setExtensions(List<CmisExtensionElement> arg0) {
+            }
+    
+        }
+    
+        /**
+         * Base class for all typeDefinitions.  
+         * See TestDocumentTypeDefinition for an example of how to subclass 
this for document.
+         *
+         */
+        private static abstract class TestTypeDefinition implements 
TypeDefinition {
+    
+            private String description = null;
+            private String displayName = null;
+            private String idAndQueryName = null;
+            private String localName = null;
+            private String localNamespace = null;
+            private String parentTypeId = null;
+            private Boolean isCreatable = null;
+            private Boolean includedInSupertypeQuery = null;
+            private Boolean queryable = null;
+            private Map<String, PropertyDefinition<?>> propertyDefinitions = 
new HashMap<String, PropertyDefinition<?>>();
+    
+            public TestTypeDefinition(String idAndQueryName, String 
description, String displayName, String localName,
+                    String localNamespace, String parentTypeId, Boolean 
isCreatable, Boolean includedInSupertypeQuery,
+                    Boolean queryable, Map<String, PropertyDefinition<?>> 
propertyDefinitions) {
+    
+                this.description = description;
+                this.displayName = displayName;
+                this.idAndQueryName = idAndQueryName;
+                this.localName = localName;
+                this.localNamespace = localNamespace;
+                this.parentTypeId = parentTypeId;
+                this.isCreatable = isCreatable;
+                this.includedInSupertypeQuery = includedInSupertypeQuery;
+                this.queryable = queryable;
+    
+                if (propertyDefinitions != null) {
+                    this.propertyDefinitions = propertyDefinitions;
+                }
+            }
+    
+            @Override
+            abstract public BaseTypeId getBaseTypeId();
+    
+            @Override
+            public String getDescription() {
+                return description;
+            }
+    
+            @Override
+            public String getDisplayName() {
+                return displayName;
+            }
+    
+            @Override
+            public String getId() {
+                return idAndQueryName;
+            }
+    
+            @Override
+            public String getLocalName() {
+                return localName;
+            }
+    
+            @Override
+            public String getLocalNamespace() {
+                return localNamespace;
+            }
+    
+            @Override
+            public String getParentTypeId() {
+                return parentTypeId;
+            }
+    
+            @Override
+            public Map<String, PropertyDefinition<?>> getPropertyDefinitions() 
{
+                return propertyDefinitions;
+            }
+    
+            @Override
+            public String getQueryName() {
+                return idAndQueryName;
+            }
+    
+            @Override
+            public Boolean isCreatable() {
+                return isCreatable;
+            }
+    
+            @Override
+            public Boolean isIncludedInSupertypeQuery() {
+                return includedInSupertypeQuery;
+            }
+    
+            @Override
+            public Boolean isQueryable() {
+                return queryable;
+            }
+    
+            
+            /**
+             * TODO For these remaining attributes you will want to set them 
+             * accordingly.  They are all set to static values only 
+             * because this is sample code. 
+             */
+    
+            @Override
+            public TypeMutability getTypeMutability() {
+                return new TestTypeMutability();
+            }
+    
+            @Override
+            public Boolean isControllableAcl() {
+                return true;
+            }
+    
+            @Override
+            public Boolean isControllablePolicy() {
+                return false;
+            }
+    
+            @Override
+            public Boolean isFileable() {
+                return true;
+            }
+    
+            @Override
+            public Boolean isFulltextIndexed() {
+                return false;
+            }
+    
+            @Override
+            public List<CmisExtensionElement> getExtensions() {
+                return null;
+            }
+    
+            @Override
+            public void setExtensions(List<CmisExtensionElement> extension) {
+            }
+    
+        }
+    
+        private static class TestDocumentTypeDefinition extends 
TestTypeDefinition implements DocumentTypeDefinition {
+    
+            private ContentStreamAllowed contentStreamAllowed = null;
+            private Boolean versionable = null;
+    
+            public TestDocumentTypeDefinition(String idAndQueryName, String 
description, String displayName,
+                    String localName, String localNamespace, String 
parentTypeId, Boolean isCreatable,
+                    Boolean includedInSupertypeQuery, Boolean queryable, 
ContentStreamAllowed contentStreamAllowed,
+                    Boolean versionable, Map<String, PropertyDefinition<?>> 
propertyDefinitions) {
+    
+                super(idAndQueryName, description, displayName, localName, 
localNamespace, parentTypeId, isCreatable,
+                        includedInSupertypeQuery, queryable, 
propertyDefinitions);
+    
+                this.contentStreamAllowed = contentStreamAllowed;
+                this.versionable = versionable;
+            }
+    
+            @Override
+            public BaseTypeId getBaseTypeId() {
+                return BaseTypeId.CMIS_DOCUMENT;
+            }
+    
+            @Override
+            public ContentStreamAllowed getContentStreamAllowed() {
+                return contentStreamAllowed;
+            }
+    
+            @Override
+            public Boolean isVersionable() {
+                return versionable;
+            }
+    
+        }
+    
+        public static class TestTypeMutability implements TypeMutability {
+           
+            /**
+             * TODO:
+             * Change these values based on your repository and requirements
+             */
+            
+            @Override
+            public List<CmisExtensionElement> getExtensions() {
+                return null;
+            }
+    
+            @Override
+            public void setExtensions(List<CmisExtensionElement> arg0) {
+            }
+            
+            @Override
+            public Boolean canCreate() {
+                return true;
+            }
+    
+            @Override
+            public Boolean canDelete() {
+                return true;
+            }
+    
+            @Override
+            public Boolean canUpdate() {
+                return true;
+            }
+        }
+    }
+    
\ No newline at end of file

Propchange: 
chemistry/site/trunk/content/java/examples/example-create-type.mdtext
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: chemistry/site/trunk/content/java/examples/index.mdtext
URL: 
http://svn.apache.org/viewvc/chemistry/site/trunk/content/java/examples/index.mdtext?rev=1667226&r1=1667225&r2=1667226&view=diff
==============================================================================
--- chemistry/site/trunk/content/java/examples/index.mdtext (original)
+++ chemistry/site/trunk/content/java/examples/index.mdtext Tue Mar 17 10:04:03 
2015
@@ -12,7 +12,8 @@ Example code and code fragments for the
 * [Processing a query](example-process-query-results.html)
 * [Reading metadata and content](example-read-meta-content.html)
 * [Reading the root folder](example-read-root.html)
-* [Retrieving the id from path](example-get-id-from-path.html)
+* [Retrieving the ID from path](example-get-id-from-path.html)
+* [Creating a type (CMIS 1.1)](example-create-type.html)
 
 ## Advanced 
 


Reply via email to