Package org.platformlayer.service.jetty.ops

Source Code of org.platformlayer.service.jetty.ops.SimpleApp$ContextTemplate

package org.platformlayer.service.jetty.ops;

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

import javax.inject.Inject;

import org.platformlayer.InetAddressChooser;
import org.platformlayer.core.model.PlatformLayerKey;
import org.platformlayer.ops.Bound;
import org.platformlayer.ops.Handler;
import org.platformlayer.ops.OpsException;
import org.platformlayer.ops.OpsProvider;
import org.platformlayer.ops.OpsTarget;
import org.platformlayer.ops.filesystem.DownloadFileByHash;
import org.platformlayer.ops.filesystem.ManagedDirectory;
import org.platformlayer.ops.filesystem.ManagedSymlink;
import org.platformlayer.ops.filesystem.TemplatedFile;
import org.platformlayer.ops.networks.NearestAddressChooser;
import org.platformlayer.ops.networks.NetworkPoint;
import org.platformlayer.ops.standardservice.PropertiesConfigFile;
import org.platformlayer.ops.templates.TemplateDataSource;
import org.platformlayer.ops.tree.OpsTreeBase;
import org.platformlayer.ops.uses.LinkHelpers;
import org.platformlayer.ops.uses.SimpleLinkConsumer;
import org.platformlayer.service.jetty.model.JettyContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Maps;

public class SimpleApp extends OpsTreeBase {
  private static final Logger log = LoggerFactory.getLogger(SimpleApp.class);

  public String key;
  public JettyContext context;

  @Bound
  JettyTemplate jettyTemplate;

  @Inject
  LinkHelpers consumeHelper;

  public PlatformLayerKey consumerKey;

  public File getWorkDir() {
    File workDir = new File(jettyTemplate.getBaseDir(), "work/" + key);
    return workDir;
  }

  class ContextTemplate implements TemplateDataSource {

    @Override
    public void buildTemplateModel(Map<String, Object> model) throws OpsException {
      model.put("contextParameters", getContextParameters().entrySet());
    }

    public Map<String, String> getContextParameters() {
      Map<String, String> contextParameters = Maps.newHashMap();

      contextParameters.put("conf", getConfigurationFilePath().getAbsolutePath());
      contextParameters.put("org.eclipse.jetty.servlet.Default.dirAllowed", "false");

      return contextParameters;
    }
  }

  @Handler
  public void handler(OpsTarget target) throws IOException, OpsException {
  }

  public File getConfigurationFilePath() {
    return new File(getWorkDir(), "configuration.properties");
  }

  @Override
  protected void addChildren() throws OpsException {
    DownloadFileByHash download = addChild(buildDownload());
    File deployed = new File(jettyTemplate.getWarsDeployDir(), getWarName());
    addChild(ManagedSymlink.build(deployed, download.filePath));

    addChild(ManagedDirectory.build(getWorkDir(), "0700"));

    {
      PropertiesConfigFile conf = addChild(PropertiesConfigFile.class);
      conf.filePath = getConfigurationFilePath();
      conf.propertiesSupplier = new OpsProvider<Map<String, String>>() {
        @Override
        public Map<String, String> get() throws OpsException {
          return getConfigurationProperties();
        }
      };
    }

    File contextDir = jettyTemplate.getContextDir();
    ContextTemplate contextTemplate = new ContextTemplate();
    addChild(TemplatedFile.build(contextTemplate, new File(contextDir, "context.xml")));
  }

  protected Map<String, String> getConfigurationProperties() throws OpsException {
    Map<String, String> config = Maps.newHashMap();

    if (context.links != null) {
      NetworkPoint networkPoint = NetworkPoint.forTargetInContext();
      InetAddressChooser inetAddressChooser = NearestAddressChooser.build(networkPoint);
      SimpleLinkConsumer consumer = new SimpleLinkConsumer(consumerKey, inetAddressChooser);

      config.putAll(consumeHelper.buildLinkTargetProperties(consumer, context.links.getLinks()));
    }

    return config;
  }

  protected DownloadFileByHash buildDownload() {
    DownloadFileByHash download = injected(DownloadFileByHash.class);
    download.filePath = new File(jettyTemplate.getWarsStagingDir(), getWarName());
    download.specifier = context.source;

    return download;
  }

  private String getWarName() {
    return key + ".war";
  }

}
TOP

Related Classes of org.platformlayer.service.jetty.ops.SimpleApp$ContextTemplate

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.