/*******************************************************************************
* 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 java.io.*;
import java.util.*;
import org.jboss.tools.common.model.XModelObjectConstants;
import org.jboss.tools.common.model.filesystems.FilePathHelper;
public class FileSystemPeer {
private Hashtable<String,Info> p = new Hashtable<String,Info>();
public FileSystemPeer() {}
public void clear() {
p.clear();
}
public void register(File f) {
p.put(toKey(f), new Info(f));
}
public void unregister(File f) {
p.remove(toKey(f));
}
public void unregisterDir(File f) {
p.remove(toKey(f, true));
}
public boolean contains(File f) {
return p.containsKey(toKey(f));
}
public boolean containsDir(File f) {
return p.containsKey(toKey(f, true));
}
public boolean isUpdated(File f) {
Info o = p.get(toKey(f));
return (o == null) ? f.exists() : o.changed(f);
}
private String toKey(File f) {
return toKey(f, f.isDirectory());
}
private String toKey(File f, boolean asDir) {
String s = f.getAbsolutePath().replace('\\', '/');
s = FilePathHelper.toPathPath(s);
return (asDir) ? s + XModelObjectConstants.SEPARATOR : s;
}
class Info {
long lastModified;
long length;
Info(File f) {
lastModified = f.lastModified();
length = f.length();
}
public boolean equals(Info other) {
return lastModified != other.lastModified || length != other.length;
}
public boolean equals(File other) {
return lastModified != other.lastModified() || length != other.length();
}
public boolean changed(File f) {
return equals(f);
}
}
}