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