All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.umlg.runtime.restlet.UmlgRestletApplication Maven / Gradle / Ivy

The newest version!
package org.umlg.runtime.restlet;

import org.restlet.Application;
import org.restlet.Restlet;
import org.restlet.data.MediaType;
import org.restlet.ext.freemarker.TemplateRepresentation;
import org.restlet.representation.FileRepresentation;
import org.restlet.resource.Directory;
import org.restlet.routing.Router;
import org.restlet.routing.Template;
import org.restlet.service.EncoderService;
import org.umlg.ocl.UmlgOcl2Parser;
import org.umlg.runtime.adaptor.DefaultDataCreator;
import org.umlg.runtime.adaptor.UMLG;
import org.umlg.runtime.adaptor.UmlgAdminAppFactory;
import org.umlg.runtime.adaptor.UmlgGraphManager;
import org.umlg.runtime.util.UmlgProperties;

import java.io.File;
import java.net.URL;

/**
 * Date: 2014/01/15
 * Time: 4:14 PM
 */
public abstract class UmlgRestletApplication extends Application {

    /**
     * default constructor for RestAndJsonApplication
     */
    public UmlgRestletApplication() {
        setStatusService(new ErrorStatusService());
        getEncoderService().setEnabled(true);
        init();
    }

    @Override
    public Restlet createInboundRoot() {
        Router router = new Router(getContext());
        attachAll(router);
        router.attach("/ui2", UmlgGuiServerResource.class, Template.MODE_STARTS_WITH);
        Directory slickgrid = null;
        Directory css = null;

        boolean servlet = true;
        boolean restlet = true;
        try {
            Class.forName("org.restlet.ext.servlet.ServerServlet");
        } catch (NoClassDefFoundError e) {
            servlet = false;
        } catch (ClassNotFoundException e) {
            servlet = false;
        }
        if (servlet) {
            URL jettyMarker = Thread.currentThread().getContextClassLoader().getResource("jetty.marker");
            servlet = jettyMarker == null;
        }
        if (servlet) {
            slickgrid = new Directory(getContext(), "war:///javascript/");
            css = new Directory(getContext(), "war:///css");
        } else if (restlet) {
            File current = new File(".");
            if (UmlgProperties.INSTANCE.isLoadUiResourcesFromFile()) {
                slickgrid = new Directory(getContext(), "file:///" + current.getAbsolutePath() + "/runtime/runtime-ui/src/main/webapp/javascript");
            } else {
                slickgrid = new Directory(getContext(), "clap:///javascript/");
            }
            //This is only relevant for simple restlet case, not via jetty
            if (UmlgProperties.INSTANCE.isLoadUiResourcesFromFile()) {
                css = new Directory(getContext(), "file:///" + current.getAbsolutePath() + "/runtime/runtime-ui/src/main/webapp/css");
            } else {
                css = new Directory(getContext(), "clap:///css");
            }
        } else {
            //development environment
        }

        slickgrid.setListingAllowed(true);
        router.attach("/javascript/", slickgrid);
        css.setListingAllowed(true);
        router.attach("/css/", css);

        UmlgRestletFilter umlgRestletFilter = new UmlgRestletFilter(getContext());
        umlgRestletFilter.setNext(router);
        return umlgRestletFilter;
    }

    /**
     * Override this method to attach the application's resources to the router
     *
     * @param router The router that the application resources will be attached to.
     */
    protected abstract void attachAll(Router router);

    /**
     * Return the file name of the uml model. i.e. somethingModel.uml
     * It must be on the classpath and will be loaded via the ClassLoader
     *
     * @return A string representing the model's file name.
     */
    protected abstract String getModelFileName();

    protected void init() {
        UmlgOcl2Parser.INSTANCE.init(getModelFileName());
        UmlgGraphManager.INSTANCE.startupGraph();
        if (UmlgProperties.INSTANCE.isStartAdminApplication()) {
            UmlgAdminAppFactory.getUmlgAdminApp().startAdminApplication();
        }
        if (UmlgProperties.INSTANCE.isCreateDefaultData()) {
            try {
                DefaultDataCreator defaultDataCreator = (DefaultDataCreator) Class.forName(UmlgProperties.INSTANCE.getDefaultDataLoaderClass()).newInstance();
                defaultDataCreator.createData();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }
        UMLG.get().rollback();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy