/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.filesystems.impl;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.util.*;
public class JarSystemImpl extends JarFolderImpl implements org.jboss.tools.common.model.filesystems.FileSystem {
private static final long serialVersionUID = 7958999759019059243L;
protected JarAccess jar = null;
public JarSystemImpl() {}
public int getFileType() {
return SYSTEM;
}
protected JarSystemImpl getJarSystem() {
return this;
}
protected JarAccess getJarAccess() {
if(jar == null) {
jar = JarAccessFactory.getJarAccess(getLocation(), this);
}
return jar;
}
public boolean isAttributeEditable(String name) {
return super.isAttributeEditable(name) && XModelObjectConstants.ATTR_NAME.equals(name);
}
protected String getAbsolutePath() {
return ""; //$NON-NLS-1$
}
boolean loaded2 = false;
protected void loadChildren() {
if(!isActive()) {
return;
}
// if(jar.isLoaded()) return;
if(this != getJarAccess().getMain()) return;
if(loaded2) return;
synchronized (this) {
jar.setLocation(getLocation());
super.loadChildren();
}
loaded2 = true;
}
public XModelObject[] getChildren() {
JarSystemImpl main = getJarAccess().getMain();
return (main == this || main == null) ? super.getChildren() : main.getChildren();
}
public boolean hasChildren() {
JarSystemImpl main = getJarAccess().getMain();
return (main == this || main == null) ? super.hasChildren() : main.hasChildren();
}
public XModelObject getChildByPathPart(String pathpart) {
JarSystemImpl main = getJarAccess().getMain();
return (main == this || main == null) ? super.getChildByPathPart(pathpart) : main.getChildByPathPart(pathpart);
}
public String getPathPart() {
return name();
}
public String getLocation() {
return Paths.expand(get(XModelObjectConstants.ATTR_NAME_LOCATION), getModel().getProperties());
}
public String getTempLocation() {
JarSystemImpl main = getJarAccess().getMain();
if(main != this && main != null) {
main.getChildren();
} else if(!jar.isLoaded()) {
loadChildren();
}
String s = jar.getTempLocation();
return (s == null) ? get(XModelObjectConstants.ATTR_NAME_LOCATION) : s;
}
public LFileObject getFileObject(String relpath) {
return getJarAccess().getFileObject(name(), relpath);
}
public boolean update() {
if(getJarAccess().getMain() != this) return true;
if(jar.isModified()) {
if(jar.isLoaded()) {
XModelObject[] cs = getChildren();
for (int i = 0; i < cs.length; i++) removeChild_0(cs[i]);
jar.invalidate();
}
jarUpdated();
JarSystemImpl[] ss = getJarAccess().getSlaves();
for (JarSystemImpl s: ss) s.jarUpdated();
}
return true;
}
public void jarUpdated() {
loaded = false;
loaded2 = false;
fire = true;
if(getParent() instanceof FileSystemsImpl) {
((FileSystemsImpl)getParent()).getLibs().libraryChanged(this);
}
fireStructureChanged(3, null);
}
public String getPresentationString() {
String location = getLocation();
if(location != null) {
location = location.replace('\\', '/');
int i = location.lastIndexOf('/');
if(i >= 0) location = location.substring(i + 1);
return location;
}
return super.getPresentationString();
}
}