Package org.apache.abdera.protocol.server.processors

Source Code of org.apache.abdera.protocol.server.processors.MultipartRelatedServiceRequestProcessor

package org.apache.abdera.protocol.server.processors;

import java.io.IOException;
import java.util.Collection;
import java.util.Map;

import org.apache.abdera.protocol.server.CategoriesInfo;
import org.apache.abdera.protocol.server.CategoryInfo;
import org.apache.abdera.protocol.server.CollectionInfo;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.ResponseContext;
import org.apache.abdera.protocol.server.WorkspaceInfo;
import org.apache.abdera.protocol.server.WorkspaceManager;
import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
import org.apache.abdera.protocol.server.multipart.MultipartRelatedCollectionInfo;
import org.apache.abdera.util.Constants;
import org.apache.abdera.writer.StreamWriter;

/**
* {@link org.apache.abdera.protocol.server.RequestProcessor} implementation which processes requests for service
* documents. It writes multipart/related accept attributes when is enabled.
*/
public class MultipartRelatedServiceRequestProcessor extends ServiceRequestProcessor {

    @Override
    protected ResponseContext getServiceDocument(final RequestContext request, final WorkspaceManager workspaceManager) {
        return new StreamWriterResponseContext(request.getAbdera()) {

            protected void writeTo(StreamWriter sw) throws IOException {
                sw.startDocument().startService();
                for (WorkspaceInfo wi : workspaceManager.getWorkspaces(request)) {
                    sw.startWorkspace().writeTitle(wi.getTitle(request));
                    Collection<CollectionInfo> collections = wi.getCollections(request);

                    if (collections != null) {
                        for (CollectionInfo ci : collections) {
                            sw.startCollection(ci.getHref(request)).writeTitle(ci.getTitle(request));
                            if (ci instanceof MultipartRelatedCollectionInfo) {
                                MultipartRelatedCollectionInfo multipartCi = (MultipartRelatedCollectionInfo)ci;
                                for (Map.Entry<String, String> accept : multipartCi.getAlternateAccepts(request)
                                    .entrySet()) {
                                    sw.startElement(Constants.ACCEPT);
                                    if (accept.getValue() != null && accept.getValue().length() > 0) {
                                        sw.writeAttribute(Constants.LN_ALTERNATE, accept.getValue());
                                    }
                                    sw.writeElementText(accept.getKey()).endElement();
                                }
                            } else {
                                sw.writeAccepts(ci.getAccepts(request));
                            }
                            CategoriesInfo[] catinfos = ci.getCategoriesInfo(request);
                            if (catinfos != null) {
                                for (CategoriesInfo catinfo : catinfos) {
                                    String cathref = catinfo.getHref(request);
                                    if (cathref != null) {
                                        sw.startCategories().writeAttribute("href",
                                                                            request.getTargetBasePath() + cathref)
                                            .endCategories();
                                    } else {
                                        sw.startCategories(catinfo.isFixed(request), catinfo.getScheme(request));
                                        for (CategoryInfo cat : catinfo) {
                                            sw.writeCategory(cat.getTerm(request), cat.getScheme(request), cat
                                                .getLabel(request));
                                        }
                                        sw.endCategories();
                                    }
                                }
                            }
                            sw.endCollection();
                        }
                    }
                    sw.endWorkspace();
                }
                sw.endService().endDocument();
            }
        }.setStatus(200).setContentType(Constants.APP_MEDIA_TYPE);
    }

}
TOP

Related Classes of org.apache.abdera.protocol.server.processors.MultipartRelatedServiceRequestProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.