/*******************************************************************************
* Copyright (c) 2007 Cambridge Semantics Incorporated.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* File: $Source$
* Created by: Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>)
* Created on: Sep 19, 2007
* Revision: $Id$
*
* Contributors:
* Cambridge Semantics Incorporated - initial API and implementation
*******************************************************************************/
package org.openanzo.jet.services;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;
import java.util.Vector;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.types.FileSet;
import org.openanzo.ontologies.system.Service;
import org.openanzo.ontologies.system.SystemFactory;
import org.openanzo.rdf.Constants;
import org.openanzo.rdf.INamedGraph;
import org.openanzo.rdf.NamedGraph;
import org.openanzo.rdf.utils.ReadWriteUtils;
/**
* Ant Task for running property definition generator
*
* @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com </a>)
*
*/
public class ServerServicesDefinitionTask extends MatchingTask {
File destinationFolder;
File wikiDestinationFolder;
File wsddDestinationFolder;
String servicesType;
String interfacePackage = "org/openanzo/services/";
String statsPackage = "org/openanzo/services/stats/";
String combusPackage = "org/openanzo/combus/listeners/";
String restPackage = "org/openanzo/rest/listener/";
String wsPackage = "org/openanzo/ws/listener/";
List<FileSet> fileSets = new Vector<FileSet>();
/**
* Create a new composition task
*/
public ServerServicesDefinitionTask() {
}
/**
* Set the destination file
*
* @param destinationFolder
* directory where the property classes is written
*/
public void setDestdir(File destinationFolder) {
this.destinationFolder = destinationFolder;
}
/**
* Set the wikiDestinationFolder file
*
* @param destinationFolder
* directory where the wiki text is written
*/
public void setWikiDestdir(File destinationFolder) {
this.wikiDestinationFolder = destinationFolder;
}
/**
* Set the wsddDestinationFolder file
*
* @param destinationFolder
* directory where the wsdd text is written
*/
public void setWsddDestdir(File destinationFolder) {
this.wsddDestinationFolder = destinationFolder;
}
/**
* Add a set of files to parse
*
* @param fileSet
* a set of files to parse
*/
public void addFileset(FileSet fileSet) {
fileSets.add(fileSet);
}
@Override
public void execute() throws BuildException {
INamedGraph graph = new NamedGraph(Constants.valueFactory.createURI("http://test"));
for (FileSet set : fileSets) {
DirectoryScanner ds = set.getDirectoryScanner(getProject());
String files[] = ds.getIncludedFiles();
String base = ds.getBasedir().getAbsolutePath();
for (String file : files) {
if (file.endsWith(".ttl")) {
try {
ReadWriteUtils.loadGraph(graph, new File(base + File.separatorChar + file));
} catch (Exception e) {
e.printStackTrace();
throw new BuildException(e);
}
}
}
}
java.util.List<Service> services = SystemFactory.getAllService(graph);
ServicesCombusListenerTemplate combusListenerTemplate = new ServicesCombusListenerTemplate();
ServicesWsListenerTemplate wsListenerTemplate = new ServicesWsListenerTemplate();
ServicesRestListenerTemplate restListenerTemplate = new ServicesRestListenerTemplate();
ServicesWsddTemplate wsddTemplate = new ServicesWsddTemplate();
try {
for (Service service : services) {
ServerServiceWrapper wrapper = new ServerServiceWrapper(service, this);
if ((servicesType == null || servicesType.equals("COMBUS")) && service.getAvailableOverJms() != null && service.getAvailableOverJms()) {
String output = combusListenerTemplate.generate(wrapper);
File destFile = new File(this.destinationFolder, combusPackage + "/Combus" + service.getName() + "Listener.java");
if (!destFile.exists()) {
destFile.getParentFile().mkdirs();
destFile.createNewFile();
}
Writer fos = new OutputStreamWriter(new FileOutputStream(destFile), "UTF-8");
fos.write(output);
fos.close();
}
if ((servicesType == null || servicesType.equals("REST")) && service.getAvailableOverRest() != null && service.getAvailableOverRest()) {
String restOutput = restListenerTemplate.generate(wrapper);
File restFile = new File(this.destinationFolder, restPackage + "Rest" + service.getName() + "Listener.java");
if (!restFile.exists()) {
restFile.getParentFile().mkdirs();
restFile.createNewFile();
}
Writer restos = new OutputStreamWriter(new FileOutputStream(restFile), "UTF-8");
restos.write(restOutput);
restos.close();
}
}
if (servicesType == null || servicesType.equals("WS")) {
String wsddOutput = wsddTemplate.generate(services);
File wsddFile = new File(this.wsddDestinationFolder, "server-config.wsdd");
if (!wsddFile.exists()) {
wsddFile.getParentFile().mkdirs();
wsddFile.createNewFile();
}
Writer wsddos = new OutputStreamWriter(new FileOutputStream(wsddFile), "UTF-8");
wsddos.write(wsddOutput);
wsddos.close();
String wsOutput = wsListenerTemplate.generate(getWrapper());
File wsFile = new File(this.destinationFolder, wsPackage + "WSListener.java");
if (!wsFile.exists()) {
wsFile.getParentFile().mkdirs();
wsFile.createNewFile();
}
Writer wsos = new OutputStreamWriter(new FileOutputStream(wsFile), "UTF-8");
wsos.write(wsOutput);
wsos.close();
}
} catch (IOException ioe) {
ioe.printStackTrace();
throw new BuildException(ioe);
} catch (NullPointerException npe) {
npe.printStackTrace();
throw new BuildException(npe);
}
}
/**
* @return the servicesType
*/
public String getServicesType() {
return servicesType;
}
/**
* @param servicesType
* the servicesType to set
*/
public void setServicesType(String servicesType) {
this.servicesType = servicesType;
}
/**
* Get combus package
*
* @return combus package
*/
public String getCombusPackage() {
return combusPackage;
}
/**
* Set combus package
*
* @param combusPackage
* combus package
*/
public void setCombusPackage(String combusPackage) {
this.combusPackage = combusPackage;
}
/**
* Get rest package
*
* @return rest package
*/
public String getRestPackage() {
return restPackage;
}
/**
* Set rest package
*
* @param restPackage
* rest package
*/
public void setRestPackage(String restPackage) {
this.restPackage = restPackage;
}
/**
* Get ws package
*
* @return ws package
*/
public String getWsPackage() {
return wsPackage;
}
/**
* Set ws package
*
* @param wsPackage
* ws package
*/
public void setWsPackage(String wsPackage) {
this.wsPackage = wsPackage;
}
/**
* @return the interfacePackage
*/
public String getInterfacePackage() {
return interfacePackage;
}
/**
* @param interfacePackage
* the interfacePackage to set
*/
public void setInterfacePackage(String interfacePackage) {
this.interfacePackage = interfacePackage;
}
/**
* @return the statsPackage
*/
public String getStatsPackage() {
return statsPackage;
}
/**
* @param statsPackage
* the statsPackage to set
*/
public void setStatsPackage(String statsPackage) {
this.statsPackage = statsPackage;
}
}