/*******************************************************************************
* 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 ServicesDefinitionTask extends MatchingTask {
File destinationFolder;
File wikiDestinationFolder;
List<FileSet> fileSets = new Vector<FileSet>();
String servicesType;
String interfacePackage = "org/openanzo/services/";
String statsPackage = "org/openanzo/services/stats/";
String combusPackage = "org/openanzo/combus/proxy/";
String restPackage = "org/openanzo/rest/proxy/";
String wsPackage = "org/openanzo/ws/proxy/";
/**
* Create a new composition task
*/
public ServicesDefinitionTask() {
}
/**
* 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;
}
/**
* 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);
ServicesInterfaceTemplate interfaceTemplate = new ServicesInterfaceTemplate();
ServicesCombusProxyTemplate proxyTemplate = new ServicesCombusProxyTemplate();
ServicesRestProxyTemplate restTemplate = new ServicesRestProxyTemplate();
ServicesWSProxyTemplate wsTemplate = new ServicesWSProxyTemplate();
ServicesSoapConstantsTemplate soapTemplate = new ServicesSoapConstantsTemplate();
try {
for (Service service : services) {
ServiceWrapper wrapper = new ServiceWrapper(service, this);
if (servicesType == null || servicesType.equals("INTERFACES")) {
String output = interfaceTemplate.generate(wrapper);
File destFile = new File(this.destinationFolder, interfacePackage + "I" + service.getName() + ".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("COMBUS")) && service.getAvailableOverJms() != null && service.getAvailableOverJms()) {
String jmsOutput = proxyTemplate.generate(wrapper);
File jmsFile = new File(this.destinationFolder, combusPackage + "Combus" + service.getName() + "Proxy.java");
if (!jmsFile.exists()) {
jmsFile.getParentFile().mkdirs();
jmsFile.createNewFile();
}
Writer jmsFos = new OutputStreamWriter(new FileOutputStream(jmsFile), "UTF-8");
jmsFos.write(jmsOutput);
jmsFos.close();
}
if ((servicesType == null || servicesType.equals("REST")) && service.getAvailableOverRest() != null && service.getAvailableOverRest()) {
String restOutput = restTemplate.generate(wrapper);
File restFile = new File(this.destinationFolder, restPackage + "Rest" + service.getName() + "Proxy.java");
if (!restFile.exists()) {
restFile.getParentFile().mkdirs();
restFile.createNewFile();
}
Writer restFos = new OutputStreamWriter(new FileOutputStream(restFile), "UTF-8");
restFos.write(restOutput);
restFos.close();
}
if ((servicesType == null || servicesType.equals("WS")) && service.getAvailableOverWS() != null && service.getAvailableOverWS()) {
String wsOutput = wsTemplate.generate(wrapper);
File wsFile = new File(this.destinationFolder, wsPackage + "WS" + service.getName() + "Proxy.java");
if (!wsFile.exists()) {
wsFile.getParentFile().mkdirs();
wsFile.createNewFile();
}
Writer wsFos = new OutputStreamWriter(new FileOutputStream(wsFile), "UTF-8");
wsFos.write(wsOutput);
wsFos.close();
}
if ((servicesType == null || servicesType.equals("WS")) && service.getAvailableOverWS() != null && service.getAvailableOverWS()) {
String soapOutput = soapTemplate.generate(wrapper);
File soapFile = new File(this.destinationFolder, wsPackage + service.getName() + "SoapConstants.java");
if (!soapFile.exists()) {
soapFile.getParentFile().mkdirs();
soapFile.createNewFile();
}
Writer soapFos = new OutputStreamWriter(new FileOutputStream(soapFile), "UTF-8");
soapFos.write(soapOutput);
soapFos.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;
}
}