/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.foundation.rm; import java.io.File; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.Vector; import org.openflexo.foundation.FlexoObject; import org.openflexo.foundation.utils.FlexoProjectFile; import org.openflexo.xmlcode.XMLSerializable; /** * Please comment this class * * @author sguerin * */ public class ProjectExternalRepository extends FlexoObject implements XMLSerializable { private FlexoProject _project; private String _identifier; private File _directory; private Map<String, String> directoriesForUser = new TreeMap<String, String>(); private static final String getUserName() { return System.getProperty("user.name"); } /** * Constructor used for XML Serialization: never try to instanciate resource from this constructor * * @param builder */ public ProjectExternalRepository(FlexoProjectBuilder builder) { this(builder.project); } public ProjectExternalRepository(FlexoProject aProject, String identifier) { this(aProject); setIdentifier(identifier); } public ProjectExternalRepository(FlexoProject aProject, String identifier, File directory) { this(aProject, identifier); setDirectory(directory); } public ProjectExternalRepository(FlexoProject aProject) { super(); _project = aProject; } public String getName() { return getIdentifier(); } public String getIdentifier() { return _identifier; } public void setIdentifier(String identifier) { _identifier = identifier; } public File getDirectory() { if (_directory == null) { String s = directoriesForUser.get(getUserName()); if (s != null) { _directory = new File(s); } _isConnected = _directory != null && _directory.exists(); } return _directory; } public void setDirectory(File directory) { _directory = directory; if (_directory != null) { directoriesForUser.put(getUserName(), _directory.getAbsolutePath()); } else { directoriesForUser.remove(getUserName()); } _isConnected = _directory != null && _directory.exists(); getProject().clearCachedFiles(); getProject().notifyResourceChanged(null); } public FlexoProject getProject() { return _project; } public String getSerializationIdentifier() { return getProject().getUserIdentifier() + "_" + getIdentifier(); } @Override public String toString() { return "ProjectExternalRepository:" + getName() + "[" + (getDirectory() != null ? getDirectory().getAbsolutePath() : "null") + "]"; } private boolean _isConnected = false; private boolean _isNormallyConnected = false; public boolean isConnected() { return _isConnected; } public boolean shouldBeConnected() { return _isNormallyConnected; } public boolean _getIsConnected() { return isConnected(); } public void _setIsConnected(boolean aBoolean) { _isNormallyConnected = aBoolean; } public List<FlexoFileResource<? extends FlexoResourceData>> getRelatedResources() { List<FlexoFileResource<? extends FlexoResourceData>> returned = new Vector<FlexoFileResource<? extends FlexoResourceData>>(); for (FlexoResource<? extends FlexoResourceData> resource : getProject()) { if (resource instanceof FlexoFileResource) { FlexoProjectFile pFile = ((FlexoFileResource<? extends FlexoResourceData>) resource).getResourceFile(); if (pFile.getExternalRepository() == this) { returned.add((FlexoFileResource<? extends FlexoResourceData>) resource); } } } return returned; } public List<FlexoFileResource<? extends FlexoResourceData>> getRelatedActiveResources() { List<FlexoFileResource<? extends FlexoResourceData>> returned = new Vector<FlexoFileResource<? extends FlexoResourceData>>(); for (FlexoFileResource<? extends FlexoResourceData> resource : getRelatedResources()) { if (resource.isActive()) { returned.add(resource); } } return returned; } public Map<String, String> getDirectoriesForUser() { return directoriesForUser; } public void setDirectoriesForUser(Map<String, String> directoriesForUser) { this.directoriesForUser = new TreeMap<String, String>(directoriesForUser); } public void setDirectoriesForUserForKey(String directory, String user) { directoriesForUser.put(user, directory); } public void removeDirectoriesForUserWithKey(String key) { this.directoriesForUser.remove(key); } }