Package org.drools.guvnor.server.jaxrs

Source Code of org.drools.guvnor.server.jaxrs.Translator

/*
* Copyright 2011 JBoss Inc
*
* 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.
*/

package org.drools.guvnor.server.jaxrs;

import org.drools.guvnor.server.jaxrs.jaxb.*;
import org.drools.guvnor.server.jaxrs.jaxb.Package;
import org.drools.guvnor.server.jaxrs.providers.atom.Content;
import org.drools.guvnor.server.jaxrs.providers.atom.Entry;
import org.drools.guvnor.server.jaxrs.providers.atom.Link;
import org.drools.guvnor.server.jaxrs.providers.atom.Person;
import org.drools.repository.AssetItem;
import org.drools.repository.CategoryItem;
import org.drools.repository.ModuleItem;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceException;
import java.net.URI;
import java.util.*;


public class Translator {
    public static final String NS = "";
    public static final QName METADATA = new QName(NS, "metadata");
    public static final QName VALUE = new QName(NS, "value");
    public static final QName ARCHIVED = new QName(NS, "archived");
    public static final QName UUID = new QName(NS, "uuid");
    public static final QName STATE = new QName(NS, "state");
    public static final QName FORMAT = new QName(NS, "format");
    public static final QName CATEGORIES = new QName(NS, "categories");
    public static final QName VERSION_NUMBER = new QName(NS, "versionNumber");
    public static final QName CHECKIN_COMMENT = new QName(NS, "checkinComment");

    public static Category toCategory(CategoryItem categoryItem, UriInfo uriInfo) {
        Category category = new Category();
        category.setPath(categoryItem.getFullPath());
        category.setRefLink(uriInfo.getBaseUriBuilder()
                .path("/categories/{categoryPath}")
                .build(categoryItem.getFullPath()));
        // TODO https://issues.jboss.org/browse/GUVNOR-1802
//        category.setRefLink(uriInfo.getBaseUriBuilder()
//                .path("categories").segment(categoryItem.getFullPath())
//                .build());
        return category;
    }

    public static Asset toAsset(AssetItem a, UriInfo uriInfo) {
        AssetMetadata metadata = new AssetMetadata();
        metadata.setUuid(a.getUUID());
        metadata.setCreated(a.getCreatedDate().getTime());
        metadata.setDisabled(a.getDisabled());
        metadata.setFormat(a.getFormat());
        metadata.setState(a.getState() == null ? "" : a.getState().getName());
        metadata.setNote("<![CDATA[ " + a.getCheckinComment() + " ]]>");
        metadata.setCheckInComment(a.getCheckinComment());
        metadata.setVersionNumber(a.getVersionNumber());
        List<CategoryItem> categories = a.getCategories();
        //TODO: Is this a bug since cat's are never assigned to metadata after this?
        String[] cats = new String[categories.size()];
        int counter = 0;
        for (CategoryItem c : categories) {
            cats[counter++] = c.getName();
        }

        Asset ret = new Asset();
        ret.setTitle(a.getTitle());
        ret.setBinaryContentAttachmentFileName(a.getBinaryContentAttachmentFileName());
        ret.setPublished(a.getLastModified().getTime());
        ret.setAuthor(a.getLastContributor());
        ret.setMetadata(metadata);
        ret.setDescription(a.getDescription());
        ret.setRefLink(uriInfo.getBaseUriBuilder()
                .path("/packages/{packageName}/assets/{assetName}")
                .build(a.getModule().getName(), a.getName()));
        ret.setBinaryLink(uriInfo.getBaseUriBuilder()
                .path("/packages/{packageName}/assets/{assetName}/binary")
                .build(a.getModule().getName(), a.getName()));
        ret.setSourceLink(uriInfo.getBaseUriBuilder()
                .path("/packages/{packageName}/assets/{assetName}/source")
                .build(a.getModule().getName(), a.getName()));
        return ret;
    }

    public static Package toPackage(ModuleItem p, UriInfo uriInfo) {
        PackageMetadata metadata = new PackageMetadata();
        metadata.setUuid(p.getUUID());
        metadata.setCreated(p.getCreatedDate().getTime());
        metadata.setState((p.getState() != null) ? p.getState().getName() : "");
        metadata.setArchived(p.isArchived());
        metadata.setVersionNumber(p.getVersionNumber());
        metadata.setCheckinComment(p.getCheckinComment());
       
        Package ret = new Package();
        ret.setMetadata(metadata);
        ret.setTitle(p.getTitle());
        ret.setAuthor(p.getLastContributor());
        ret.setPublished(p.getLastModified().getTime());
        ret.setDescription(p.getDescription());

        ret.setBinaryLink(uriInfo.getBaseUriBuilder()
                .path("/packages/{packageName}/binary")
                .build(p.getName()));
        ret.setSourceLink(uriInfo.getBaseUriBuilder()
                .path("/packages/{packageName}/source")
                .build(p.getName()));
        //ret.setSnapshot(p.getSnapshotName());

        Iterator<AssetItem> iter = p.getAssets();
        Set<URI> assets = new HashSet<URI>();
        while (iter.hasNext()) {
            AssetItem a = iter.next();
            Asset asset = toAsset(a, uriInfo);
            assets.add(asset.getRefLink());
        }

        ret.setAssets(assets);
        return ret;
    }

    public static Entry toPackageEntryAbdera(ModuleItem p, UriInfo uriInfo) {
        URI baseUri;
        if (p.isHistoricalVersion()) {
            baseUri = uriInfo.getBaseUriBuilder()
                    .path("packages/{packageName}/versions/{version}").build(p.getName(), Long.toString(p.getVersionNumber()));
        } else {
            baseUri = uriInfo.getBaseUriBuilder().path("packages/{packageName}").build(p.getName());
        }

        Entry e = new Entry();
        e.setTitle(p.getTitle());
        e.setSummary(p.getDescription());
        e.setPublished(new Date(p.getLastModified().getTimeInMillis()));
        e.setBase(baseUri);
        e.getAuthors().add(new Person(p.getLastContributor()));

        e.setId(baseUri);

        Iterator<AssetItem> i = p.getAssets();
        while (i.hasNext()) {
            AssetItem item = i.next();
            Link l = new Link();

            l.setHref(UriBuilder.fromUri(baseUri).path("assets/{assetName}").build(item.getName()));
            l.setTitle(item.getTitle());
            l.setRel("asset");
            e.getLinks().add(l);
        }
        //generate meta data
        AtomPackageMetadata metaData = (AtomPackageMetadata) e.getAnyOtherJAXBObject();
        if (metaData == null) {
            metaData = new AtomPackageMetadata();
        }
        metaData.setArchived(p.isArchived());
        metaData.setUuid(p.getUUID());
        metaData.setState(p.getState() == null ? "" : p.getState().getName());
        metaData.setVersionNumber(p.getVersionNumber());
        metaData.setCheckinComment(p.getCheckinComment());

        e.setAnyOtherJAXBObject(metaData);
        Content content = new Content();
        content.setSrc(UriBuilder.fromUri(baseUri).path("binary").build());
        content.setType(MediaType.APPLICATION_OCTET_STREAM_TYPE);
//        content.setContentType(Type.MEDIA); // TODO remove me if not it's base64 encoded fine
        e.setContent(content);
        return e;
    }

    /*    public static Entry ToPackageEntry(PackageItem p, UriInfo uriInfo) {
        UriBuilder base;
        if(p.isHistoricalVersion()) {
            base = uriInfo.getBaseUriBuilder().path("packages").path(p.getName()).path("versions").path(Long.toString(p.getVersionNumber()));
        } else {
            base = uriInfo.getBaseUriBuilder().path("packages").path(p.getName());
        }       

        //NOTE: Entry extension is not supported in RESTEasy. We need to either use Abdera or get extension
        //supported in RESTEasy
        //PackageMetadata metadata = new PackageMetadata();
        //metadata.setUuid(p.getUUID());
        //metadata.setCreated(p.getCreatedDate().getTime());
        //metadata.setLastModified(p.getLastModified().getTime());
        //metadata.setLastContributor(p.getLastContributor());
        //c.setJAXBObject(metadata);

        Entry e =new Entry();
        e.setTitle(p.getTitle());
        e.setSummary(p.getDescription());
        e.setPublished(new Date(p.getLastModified().getTimeInMillis()));
        e.setBase(base.clone().build());

        e.setId(base.clone().build());
       
        Iterator<AssetItem> i = p.getAssets();
        while (i.hasNext()) {
            AssetItem item = i.next();
            Link link = new Link();
            link.setHref((base.clone().path("assets").path(item.getName())).build());
            link.setTitle(item.getTitle());
            link.setRel("asset");
            e.getLinks().add(link);
        }
       
        Content c = new Content();
        c.setType(MediaType.APPLICATION_OCTET_STREAM_TYPE);
        c.setSrc(base.clone().path("binary").build());        
        e.setContent(c);
       
        return e;
    }*/
    public static Entry toAssetEntryAbdera(AssetItem a, UriInfo uriInfo) {
        URI baseUri;
        if (a.isHistoricalVersion()) {
            baseUri = uriInfo.getBaseUriBuilder()
                    .path("packages/{packageName}/assets/{assetName}/versions/{version}")
                    .build(a.getModuleName(), a.getName(), Long.toString(a.getVersionNumber()));
        } else {
            baseUri = uriInfo.getBaseUriBuilder()
                    .path("packages/{packageName}/assets/{assetName}")
                    .build(a.getModuleName(), a.getName());
        }

        Entry e = new Entry();
        e.setTitle(a.getTitle());
        e.setSummary(a.getDescription());
        e.setPublished(new Date(a.getLastModified().getTimeInMillis()));
        e.setBase(baseUri);
        e.getAuthors().add(new Person(a.getLastContributor()));

        e.setId(baseUri);
        try {
            AtomAssetMetadata atomAssetMetadata  = e.getAnyOtherJAXBObject(AtomAssetMetadata.class);
            if (atomAssetMetadata == null) {
                atomAssetMetadata = new AtomAssetMetadata();
            }
            atomAssetMetadata.setArchived(a.isArchived());
            atomAssetMetadata.setUuid(a.getUUID());
            atomAssetMetadata.setState(a.getState() == null ? "" : a.getState().getName());
            atomAssetMetadata.setFormat(a.getFormat());
            atomAssetMetadata.setVersionNumber(a.getVersionNumber());
            atomAssetMetadata.setCheckinComment(a.getCheckinComment());
            String[] categories = new String[a.getCategories().size()];
            int i = 0;
            for (CategoryItem cItem : a.getCategories()) {
                categories[i] = cItem.getName();
                i++;
            }
            atomAssetMetadata.setCategories(categories);
            e.setAnyOtherJAXBObject(atomAssetMetadata);
        } catch (Exception ex) {
            throw new WebServiceException(ex);
        }
        Content content = new Content();
        content.setSrc(UriBuilder.fromUri(baseUri).path("binary").build());
        content.setType(MediaType.APPLICATION_OCTET_STREAM_TYPE);
//        content.setContentType(Type.MEDIA); // TODO remove me if not it's base64 encoded fine
        e.setContent(content);

        return e;
    }

/*    public static Entry ToAssetEntry(AssetItem a, UriInfo uriInfo) {
        Entry e = new Entry();
        e.setTitle(a.getTitle());
        e.setSummary(a.getDescription());

        Content content = new Content();
        content.setType(MediaType.APPLICATION_XML_TYPE);
        AssetMetadata metadata = new AssetMetadata();
        metadata.setUuid(a.getUUID());
        metadata.setTitle(a.getTitle());
        metadata.setLastModified(a.getLastModified().getTime());
        metadata.setCreated(a.getCreatedDate().getTime());
        metadata.setCreatedBy(a.getCreator());
        metadata.setDisabled(a.getDisabled());
        metadata.setFormat(a.getFormat());
        metadata.setNote(a.getContent());
        metadata.setState((a.getState() != null) ? a.getState().getName() : "");
        content.setJAXBObject(metadata);
        e.setContent(content);

        List<CategoryItem> categories = a.getCategories();
        String[] cats = new String [categories.size()];
        int counter = 0;
        for (CategoryItem c : categories) {
            cats [ counter++ ] = c.getName();
        }

        UriBuilder builder = uriInfo.getBaseUriBuilder();
        Link l = new Link();
        l.setHref(builder.path("/packages/" + a.getPackageName() + "/asset/" +  a.getName()).build());
        l.setRel("self");
        builder = uriInfo.getBaseUriBuilder();
        e.setId(l.getHref());
        e.setPublished(new Date(a.getLastModified().getTimeInMillis()));
        e.setSummary(a.getDescription());
        e.setRights(a.getRights());

        builder = uriInfo.getBaseUriBuilder();
        l = new Link();
        l.setHref(builder.path("/packages/" + a.getPackageName() + "/asset/" +  a.getName() + "/binary").build());
        l.setRel("binary");
        e.getLinks().add(l);

        builder = uriInfo.getBaseUriBuilder();
        l = new Link();
        l.setHref(builder.path("/packages/" + a.getPackageName() + "/asset/" +  a.getName() + "/source").build());
        l.setRel("source");
        e.getLinks().add(l);

        return e;
    }*/
TOP

Related Classes of org.drools.guvnor.server.jaxrs.Translator

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.