package de.FeatureModellingTool.Documentation;
import de.FeatureModellingTool.FeatureModel.FeatureModel;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.DictEditor.*;
import de.reuse.GroupMap;
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Iterator;
import java.util.Date;
import java.util.ArrayList;
/**
* User: Raymond
* Date: 2003-11-7
* Time: 16:42:42
*/
public class DocsProducerImpl implements DocsProducer
{
protected FeatureModel featureModel = null;
protected HtmlGeneratorImpl featureG = null;
protected File fileProttp = null;
protected File directory = null;
protected static String htmlModel = ConstantDefinition.RESOURCEA_PATH + "featureModelForDocs.html";
public DocsProducerImpl()
{
}
public DocsProducerImpl(FeatureModel featureModel)
{
this.featureModel = featureModel;
this.featureG = new HtmlGeneratorImpl(htmlModel, featureModel);
}
public DocsProducerImpl(FeatureModel featureModel, File directory)
{
this.featureModel = featureModel;
this.directory = directory;
java.net.URL url = getClass().getResource(htmlModel);
this.featureG = new HtmlGeneratorImpl(new File(url.getFile()), featureModel);
}
public void setDirectory(File directory)
{
this.directory = directory;
}
public File getDirectory()
{
return directory;
}
public void setFeatureModel(FeatureModel featureModel)
{
this.featureModel = featureModel;
}
public FeatureModel getFeatureModel()
{
return featureModel;
}
public void setFileProttp(File fileProttp)
{
this.fileProttp = fileProttp;
}
public File getFileProttp()
{
return fileProttp;
}
public void featuresProduce()
{
String filename = directory.getAbsolutePath()+ File.separator + "features";
File newDir = new File(filename);
if (!newDir.exists())
{
if (!newDir.mkdir())
{
System.out.println("can not create directory features");
return;
}
}
else
{
System.out.println("Directory features already existed"); //�������ǣ���
return;
}
Map allFeatures = this.featureModel.getAllFeature();
if (allFeatures != null)
{
Iterator featureIterator = allFeatures.values().iterator();
while (featureIterator.hasNext())
{
Feature feature = (Feature) featureIterator.next();
featureG.initFeature(feature, false);
featureG.produceHtml();
filename = newDir.getAbsolutePath() + File.separator +feature.getName()+"@"+ feature.getID() + "." + "html";
featureG.outFile(filename);
}
}
}
public void othersProduce(GroupMap gm)
{
initCopy();
featuresListProduce();
viewsListProduce(gm);
viewsProduce(gm);
}
protected void initCopy()
{
String src = getClass().getResource(ConstantDefinition.RESOURCEA_PATH + "base").getPath();
String to = directory.getAbsolutePath();
try
{
featureG.copy(src, to, true);
} catch (FileNotFoundException fnfe)
{
System.out.println(fnfe);
} catch (IOException ioe)
{
System.out.println(ioe);
}
}
protected void featuresListProduce()
{
String filaname = ConstantDefinition.RESOURCEA_PATH + "allfeatures-frame.html";
filaname = getClass().getResource(filaname).getFile();
featureG.setHtmlModel(filaname);
Date date = new Date();
String instance = "";
String instance2 = "";
Map allFeatures = this.featureModel.getAllFeature();
if (allFeatures != null)
{
Iterator featureIterator = allFeatures.values().iterator();
while (featureIterator.hasNext())
{
Feature feature = (Feature) featureIterator.next();
instance += "<A HREF='features/" +feature.getName()+"@" + feature.getID() + ".html'";
instance2 += "<A HREF='features/" +feature.getName()+"@" + feature.getID() + ".html'";
instance += " TARGET='featureFrame'";
instance += ">" + feature.getName() + "</A> <BR> \r";
instance2 += ">" + feature.getName() + "</A> <BR> \r";
}
}
ArrayList keyList = new ArrayList();
ArrayList instanceList = new ArrayList();
keyList.add("@fileTag");
instanceList.add("All Features");
keyList.add("@time");
instanceList.add(date.toString());
keyList.add("@featuresList");
instanceList.add(instance);
featureG.produceHtml(keyList, instanceList);
String filename = directory.getAbsolutePath()+ File.separator + "allfeatures-frame.html";
featureG.outFile(filename);
instanceList.remove(instance);
instanceList.add(instance2);
featureG.produceHtml(keyList, instanceList);
filename = directory.getAbsolutePath()+ File.separator + "allfeatures-noframe.html";
featureG.outFile(filename);
}
protected void viewsListProduce(GroupMap gm)
{
String filaname = ConstantDefinition.RESOURCEA_PATH + "overview-frame.html";
filaname = getClass().getResource(filaname).getFile();
featureG.setHtmlModel(filaname);
Date date = new Date();
String instance = "";
Iterator keyIterator = gm.keySet().iterator();
while (keyIterator != null && keyIterator.hasNext())
{
String viewName = (String) keyIterator.next();
instance += "<FONT CLASS='FrameItemFont'><A HREF='views/" + viewName + ".html'";
instance += " TARGET='viewFrame'>" + viewName + "</A> </FONt><BR> \r";
}
ArrayList keyList = new ArrayList();
ArrayList instanceList = new ArrayList();
keyList.add("@time");
instanceList.add(date.toString());
keyList.add("@viewsList");
instanceList.add(instance);
featureG.produceHtml(keyList, instanceList);
String filename = directory.getAbsolutePath() + File.separator + "overview-frame.html";
featureG.outFile(filename);
}
public void viewsProduce(GroupMap gm)
{
String filename = directory.getAbsolutePath() + File.separator + "views";
File newDir = new File(filename);
if (!newDir.exists())
{
if (!newDir.mkdir())
{
System.out.println("can not create directory views");
return;
}
}
else
{
System.out.println("Directory views already existed");
return;
}
String filaname = ConstantDefinition.RESOURCEA_PATH + "allfeatures-frame.html";
filaname = getClass().getResource(filaname).getFile();
featureG.setHtmlModel(filaname);
Date date = new Date();
String instance = "";
Iterator keyIterator = gm.keySet().iterator();
while (keyIterator != null && keyIterator.hasNext())
{
String viewName = (String) keyIterator.next();
instance = "";
Iterator idIterator = gm.get(viewName).iterator();
while (idIterator != null && idIterator.hasNext())
{
String id = (String) idIterator.next();
if (featureModel.containsFeature(id))
{
Feature feature = featureModel.getFeature(id);
instance += "<A HREF='../features/"+feature.getName()+"@" + feature.getID() + ".html'";
instance += " TARGET='featureFrame'";
instance += ">" + feature.getName() + "</A> <BR> \r";
}
}
ArrayList keyList = new ArrayList();
ArrayList instanceList = new ArrayList();
keyList.add("@fileTag");
instanceList.add(viewName);
keyList.add("@time");
instanceList.add(date.toString());
keyList.add("@featuresList");
instanceList.add(instance);
featureG.produceHtml(keyList, instanceList);
filename = newDir.getAbsolutePath() + File.separator + viewName + ".html";
featureG.outFile(filename);
}
}
}