/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.geoforge.mdldat;
import java.io.File;
import java.util.ArrayList;
import java.util.logging.Logger;
import org.geoforge.io.file.GfrUtilFileSpcProjectAbs;
import org.geoforge.io.util.jar.JarHelper;
import org.geoforge.java.io.file.GfrUtilFile;
import org.geoforge.java.util.logging.filehandler.FileHandlerLogger;
import org.geoforge.mdldat.event.*;
import org.geoforge.wrpbasspcdatogcecl.work.GfrWrpBasSpcWrkDatSynAbs;
import org.geoforge.wrpbasusr.GfrWrpUsrSpcDspPrtAppRoot;
/**
*
* @author bill
*/
public class GfrMdlDatSpcPrtWork extends GfrMdlDatAbs
{
final private static Logger _LOGGER_ = Logger.getLogger(GfrMdlDatSpcPrtWork.class.getName());
static
{
GfrMdlDatSpcPrtWork._LOGGER_.addHandler(FileHandlerLogger.s_getInstance());
}
static private GfrMdlDatSpcPrtWork _INSTANCE_ = null;
static public GfrMdlDatSpcPrtWork getInstance()
{
if (GfrMdlDatSpcPrtWork._INSTANCE_ == null)
GfrMdlDatSpcPrtWork._INSTANCE_ = new GfrMdlDatSpcPrtWork();
return GfrMdlDatSpcPrtWork._INSTANCE_;
}
// ---
public void moveChild(
String strNameSource,
String strNameTarget,
GfrWrpBasSpcWrkDatSynAbs wrpSyn) throws Exception
{
wrpSyn.rename(strNameSource, strNameTarget);
String strPathAbsSpaceWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
super.setChanged();
Object obj = new GfrEvtMdlDtaSpcPrtMovePrj(strNameSource, strNameTarget, strPathAbsSpaceWork);
super.notifyObservers(obj);
}
public void cloneChild(
String strNameSource,
String strNameTarget,
GfrWrpBasSpcWrkDatSynAbs wrpSyn) throws Exception
{
// on DB
String strKind = wrpSyn.getKindFromName(strNameSource);
wrpSyn.save(strNameTarget, strKind);
// on disk
String strIdSource = wrpSyn.getIdFromName(strNameSource);
String strIdTarget = wrpSyn.getIdFromName(strNameTarget);
String strPathAbsSpaceWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
File fleSource = new File(strPathAbsSpaceWork, strIdSource);
File fleTarget = new File(strPathAbsSpaceWork, strIdTarget);
GfrUtilFile.s_copyDirectory(fleSource, fleTarget);
super.setChanged();
Object obj = new GfrEvtMdlDtaSpcPrtClonePrj(strIdSource, strIdTarget, strPathAbsSpaceWork);
super.notifyObservers(obj);
}
public void deleteAllChildren(
GfrWrpBasSpcWrkDatSynAbs wrpSyn,
GfrUtilFileSpcProjectAbs utlFile
) throws Exception
{
// ----
// 1) deleteFromName all files in disk
String[] strsChildrenExisting = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getSortedNamesLastChildFromHistory();
String[] strsProjectsFolder = wrpSyn.getIds();
// TODO: fix up this probleme of deleting projects recently created!
ArrayList<String> altOkId = new ArrayList<String>();
ArrayList<String> altTbrlName = new ArrayList<String>();
for (int i = 0; i < strsChildrenExisting.length; i++)
{
String strProjectFolder = strsProjectsFolder[i];
String strPathAbsFolder = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
strPathAbsFolder += File.separator;
strPathAbsFolder += strProjectFolder;
if (!utlFile.delete(new File(strPathAbsFolder)))
{
String strName = wrpSyn.getNameFromId(strsProjectsFolder[i]);
altTbrlName.add(strName);
String str = "failed to delete: " + strsProjectsFolder[i];
GfrMdlDatSpcPrtWork._LOGGER_.warning(str);
continue;
}
altOkId.add(strsProjectsFolder[i]);
}
if (!altTbrlName.isEmpty())
{
String str = "Sorry, failed to delete project(s):";
for (int i = 0; i < altTbrlName.size(); i++)
{
str += "\n. " + altTbrlName.get(i);
}
GfrMdlDatSpcPrtWork._LOGGER_.warning(str);
// TODO: return string that contains this error!!!!!!!!!
//GfrOptionPaneAbs.s_showDialogWarning(null, str);
}
// ----
// 2) deleteFromName all DB
// beg workaround
for (int i = 0; i < altOkId.size(); i++)
{
String strProjectCur = altOkId.get(i);
wrpSyn.deleteFromId(strProjectCur);
}
// end workaround
String strPathAbsSpaceWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
super.setChanged();
Object obj = new GfrEvtMdlDtaSpcPrtDelAllPrjs(strPathAbsSpaceWork);
super.notifyObservers(obj);
}
public File importChild(
File fleJarFileSource,
String strIdTarget) throws Exception
{
String strPathAbsSpaceWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
File fleDirTarget = new File(strPathAbsSpaceWork + File.separator + strIdTarget);
fleDirTarget.mkdir();
JarHelper jarUtil = new JarHelper();
jarUtil.unjarDir(fleJarFileSource, fleDirTarget);
super.setChanged();
Object obj = new GfrEvtMdlDtaSpcPrtImportPrj(strIdTarget, strPathAbsSpaceWork);
super.notifyObservers(obj);
return fleDirTarget;
}
public void deleteChild(
String strNameSource,
GfrWrpBasSpcWrkDatSynAbs wrpSyn,
GfrUtilFileSpcProjectAbs utlFile
) throws Exception
{
//Read in db
String strIdSource = wrpSyn.getIdFromName(strNameSource);
String strPathAbsSpaceWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
String strPathAbsSource = strPathAbsSpaceWork;
strPathAbsSource += File.separator;
strPathAbsSource += strIdSource;
// TODO: check for valid delete if (....)
if (!utlFile.delete(new File(strPathAbsSource)))
{
String str = "Sorry, failed to delete project named " + strNameSource;
GfrMdlDatSpcPrtWork._LOGGER_.warning(str);
throw new Exception(str);
//throw new Exception("failed to delete:" + strPathAbsSource);
}
// job on DB
wrpSyn.deleteFromName(strNameSource);
super.setChanged();
Object obj = new GfrEvtMdlDtaSpcPrtDelPrj(strIdSource, strPathAbsSpaceWork);
super.notifyObservers(obj);
}
public void newChild(String strValue, GfrWrpBasSpcWrkDatSynAbs wrpSyn) throws Exception
{
String strPathAbsSpaceWork = GfrWrpUsrSpcDspPrtAppRoot.getInstance().getValueLastChildFromHistory();
String strIdTarget = wrpSyn.save(strValue);
super.setChanged();
Object obj = new GfrEvtMdlDtaSpcPrtNewPrj(strIdTarget, strPathAbsSpaceWork);
super.notifyObservers(obj);
}
public void openChild(String strIdTarget, String strIdWrk) throws Exception
{
// ??? don't know if needed
throw new UnsupportedOperationException("Not yet implemented");
}
// ---
private GfrMdlDatSpcPrtWork()
{
super();
}
}