001package org.nuxeo.ecm.mobile.webengine.adapter;
002
003import java.util.Collections;
004import java.util.HashMap;
005import java.util.Map;
006
007import org.nuxeo.ecm.core.api.CoreSession;
008import org.nuxeo.ecm.core.api.DocumentModel;
009import org.nuxeo.ecm.core.api.DocumentModelComparator;
010import org.nuxeo.ecm.core.api.DocumentModelList;
011import org.nuxeo.ecm.core.api.Filter;
012import org.nuxeo.ecm.core.api.impl.CompoundFilter;
013import org.nuxeo.ecm.core.api.impl.FacetFilter;
014import org.nuxeo.ecm.core.api.impl.LifeCycleFilter;
015import org.nuxeo.ecm.mobile.webengine.document.MobileDocument;
016import org.nuxeo.ecm.webengine.WebException;
017import org.nuxeo.ecm.webengine.model.impl.DefaultAdapter;
018
019/**
020 * Default mobile adapter that exposes some usefull methods to other adapters.
021 * 
022 * @author <a href="mailto:akervern@nuxeo.com">Arnaud Kervern</a>
023 */
024public abstract class DefaultMobileAdapter extends DefaultAdapter {
025    public static final Filter ONLY_VISIBLE_CHILDREN = new CompoundFilter(new FacetFilter(null,
026            Collections.singletonList("HiddenInNavigation")), new LifeCycleFilter(null,
027            Collections.singletonList("deleted")));
028
029    /**
030     * Get the current DocumentModel
031     * 
032     * @return
033     */
034    protected DocumentModel getDocumentModel() {
035        MobileDocument doc = getMobileDocument();
036        if (doc == null) {
037            doc = getMobileDocument();
038        }
039        return doc.getDocument();
040    }
041
042    /**
043     * Get the current MobileDocument
044     * 
045     * @return
046     */
047    protected MobileDocument getMobileDocument() {
048        Object targetObject = ctx.getTargetObject();
049        if (!(targetObject instanceof MobileDocument)) {
050            throw new WebException("Target Object must be MobileDocument");
051        }
052
053        MobileDocument mobileDoc = (MobileDocument) targetObject;
054        return mobileDoc;
055    }
056
057    public DocumentModelList getChildren() {
058        CoreSession session = ctx.getCoreSession();
059        Map<String, String> order = new HashMap<String, String>();
060        order.put("title", "asc");
061
062        DocumentModelComparator dmc = new DocumentModelComparator("dublincore", order);
063
064        return session.getChildren(getDocumentModel().getRef(), null, ONLY_VISIBLE_CHILDREN, dmc);
065    }
066}