package org.openflexo.foundation.resource;
import java.io.File;
import java.io.IOException;
import org.openflexo.model.exceptions.ModelDefinitionException;
import org.openflexo.model.factory.ModelFactory;
import org.openflexo.toolbox.FileUtils;
public abstract class DefaultResourceCenterService implements FlexoResourceCenterService {
private LocalResourceCenterImplementation openFlexoResourceCenter;
private UserResourceCenter userResourceCenter;
public static FlexoResourceCenterService getNewInstance() {
try {
ModelFactory factory = new ModelFactory(FlexoResourceCenterService.class);
factory.setImplementingClassForInterface(DefaultResourceCenterService.class, FlexoResourceCenterService.class);
return factory.newInstance(FlexoResourceCenterService.class);
} catch (ModelDefinitionException e) {
e.printStackTrace();
}
return null;
}
public static FlexoResourceCenterService getNewInstance(File localResourceCenterDir) {
DefaultResourceCenterService service = (DefaultResourceCenterService) getNewInstance();
service.openFlexoResourceCenter = LocalResourceCenterImplementation
.instanciateNewLocalResourceCenterImplementation(localResourceCenterDir);
return service;
}
public static FlexoResourceCenterService getNewInstance(File localResourceCenterDir, boolean filterVP) {
DefaultResourceCenterService service = (DefaultResourceCenterService) getNewInstance();
service.openFlexoResourceCenter = new LocalResourceCenterImplementation(localResourceCenterDir, filterVP);
return service;
}
public DefaultResourceCenterService() {
File root = FileUtils.getApplicationDataDirectory();
File file = null;
boolean ok = false;
int i = 0;
String base = "FlexoResourceCenter";
String attempt = base;
while (!ok && i < 100) {
file = new File(root, attempt);
if (!file.exists()) {
ok = file.mkdirs();
} else {
ok = file.isDirectory() && file.canWrite();
}
i++;
attempt = base + "-" + i;
}
i = 0;
while (!ok && i < 1000) {
try {
file = File.createTempFile("FlexoResourceCenter", null);
file.delete();
file.mkdirs();
ok = file.exists() && file.canWrite();
i++;
} catch (IOException e) {
e.printStackTrace();
}
}
openFlexoResourceCenter = new LocalResourceCenterImplementation(file);
userResourceCenter = new UserResourceCenter(new File(FileUtils.getDocumentDirectory(),
"FlexoUserResourceCenter/ResourceCenterData.xml"));
}
@Override
public LocalResourceCenterImplementation getOpenFlexoResourceCenter() {
return openFlexoResourceCenter;
}
@Override
public FlexoResourceCenter getUserResourceCenter() {
return userResourceCenter;
}
}