001/*
002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
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 *
016 * Contributors:
017 *     Florent Guillaume
018 */
019package org.nuxeo.ecm.core.opencmis.impl.client;
020
021import java.util.Iterator;
022import java.util.List;
023
024import org.apache.chemistry.opencmis.client.api.ObjectType;
025import org.apache.chemistry.opencmis.client.api.Property;
026import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
027import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
028import org.apache.chemistry.opencmis.commons.enums.Cardinality;
029import org.apache.chemistry.opencmis.commons.enums.PropertyType;
030import org.nuxeo.ecm.core.opencmis.impl.server.NuxeoPropertyData;
031import org.nuxeo.ecm.core.opencmis.impl.server.NuxeoPropertyDataBase;
032
033/**
034 * Live Nuxeo document property, wrapping a {@link NuxeoPropertyData}.
035 */
036public class NuxeoProperty<T> implements Property<T> {
037
038    private final NuxeoPropertyDataBase<T> prop;
039
040    @SuppressWarnings("unchecked")
041    public NuxeoProperty(NuxeoObject object, String id) {
042        prop = (NuxeoPropertyDataBase<T>) object.data.getProperty(id);
043    }
044
045    @Override
046    public PropertyDefinition<T> getDefinition() {
047        return prop.getPropertyDefinition();
048    }
049
050    @Override
051    public String getDisplayName() {
052        return prop.getDisplayName();
053    }
054
055    @Override
056    public String getId() {
057        return prop.getId();
058    }
059
060    @Override
061    public String getLocalName() {
062        return prop.getLocalName();
063    }
064
065    @Override
066    public String getQueryName() {
067        return prop.getQueryName();
068    }
069
070    @Override
071    public PropertyType getType() {
072        return prop.getPropertyDefinition().getPropertyType();
073    }
074
075    @SuppressWarnings("unchecked")
076    @Override
077    public <U> U getValue() {
078        // cast needed by Sun compiler
079        return (U) prop.getValue();
080    }
081
082    @Override
083    public T getFirstValue() {
084        return (T) prop.getFirstValue();
085    }
086
087    @Override
088    public String getValueAsString() {
089        return String.valueOf(getFirstValue());
090    }
091
092    @Override
093    public String getValuesAsString() {
094        StringBuilder buf = new StringBuilder();
095        buf.append('[');
096        for (Iterator<T> it = getValues().iterator(); it.hasNext();) {
097            buf.append(String.valueOf(it.next()));
098            if (it.hasNext()) {
099                buf.append(", ");
100            }
101        }
102        buf.append(']');
103        return buf.toString();
104    }
105
106    @Override
107    public List<T> getValues() {
108        return (List<T>) prop.getValues();
109    }
110
111    @Override
112    public boolean isMultiValued() {
113        return prop.getPropertyDefinition().getCardinality() == Cardinality.MULTI;
114    }
115
116    @Override
117    public List<CmisExtensionElement> getExtensions() {
118        // TODO Auto-generated method stub
119        throw new UnsupportedOperationException();
120    }
121
122    @Override
123    public void setExtensions(List<CmisExtensionElement> extensions) {
124        // TODO Auto-generated method stub
125        throw new UnsupportedOperationException();
126    }
127
128}