|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2000 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.javacvs.caching; import java.io.*; import java.util.*; import java.beans.*; import java.text.*; import org.netbeans.lib.cvsclient.file.FileStatus; import org.netbeans.modules.vcscore.cache.*; import org.netbeans.modules.javacvs.commands.JavaCvsStatusManager; /** File. * * @author Milos Kleint */ //------------------------------------------- public class CvsCacheFile extends CacheFile { //------------------------------------------- public CvsCacheFile(String memberOfCache){ super(memberOfCache, new CvsCacheFile.CvsPersistentData(false)); setStatusNonModifying(JavaCvsStatusManager.LOCAL); } //------------------------------------------- public CvsCacheFile(String memberOfCache, String name){ super(memberOfCache, name, new CvsCacheFile.CvsPersistentData(false)); setStatusNonModifying(JavaCvsStatusManager.LOCAL); } CvsCacheFile(String memberOfCache, CacheFile.PersistentData data) { super(memberOfCache, data); } public void setLocal (boolean local) { ((CvsCacheFile.CvsPersistentData) getPersistentData()).setLocal(local); } public boolean isLocal () { return ((CvsCacheFile.CvsPersistentData) getPersistentData()).isLocal(); } public static final CacheFile readFileCache(String line, String cacheName, java.io.File parent) { // need to know because the refreshing cache should not modify states and should add the file eveytime.. boolean isJavaCvsCache = cacheName.equals(JavaCvsCache.JAVA_CACHE_NAME); StringTokenizer token = new StringTokenizer(line,"/", false); // NOI18N boolean newBehaviour = false; if (token.countTokens() >= 9) { newBehaviour = true; // NEW BEHAVIOUR.. NEW NUMBER OF TOKENS... } if (!line.startsWith("/")) { // NOI18N System.out.println("ERROR : Bad cache disk format (CvsCacheFile)"); // NOI18N return null; } if (token.countTokens() < 2) return null; String name = token.nextToken(); CvsCacheFile newFile = new CvsCacheFile(cacheName, name); String status = token.nextToken().intern(); boolean isNew = false; if (!new File(parent, name).exists()) { // not found == it's not on the local disk -> it's a shadow file isNew = true; // status AI - for all but removed and local change status to NEEDS_CHECKOUT. // only to those that are in the JAVACVS cache.. thus the rela ones.. // those that are created in the CacheUpdatingCommand don't count.. if (isJavaCvsCache) { if (cacheName.equals(JavaCvsCache.JAVA_CACHE_NAME)) { if (status.equals(JavaCvsStatusManager.LOCALLY_REMOVED) || status.equals(JavaCvsStatusManager.LOCAL) || status.equals(JavaCvsStatusManager.UNKNOWN)) { newFile.setStatusNonModifying(status); } else { newFile.setStatusNonModifying(JavaCvsStatusManager.NEEDS_CHECKOUT); } } else { newFile.setStatusNonModifying(status); } } else { newFile.setStatusNonModifying(status); } } else { newFile.setStatusNonModifying(status); } if (newBehaviour) { String tokenStr = token.nextToken(); newFile.setLocker(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setRevision(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setSticky(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setAttr(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N tokenStr = token.nextToken(); int size = 0; try { size = Integer.parseInt(tokenStr); } catch (NumberFormatException exc) { size = 0; } newFile.setSize(size); tokenStr = token.nextToken(); newFile.setDate(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N tokenStr = token.nextToken(); newFile.setTime(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N } else { //OLD BEHAVIOUR... if (token.hasMoreTokens()) { String tokenStr = token.nextToken(); newFile.setRevision(tokenStr.equals("") ? null : tokenStr.intern()); // NOI18N } } return newFile; } public static final CacheFile readFileCache(java.lang.String line, CvsCacheDir par) { // need to know because the refreshing cache should not modify states and should add the file eveytime.. boolean isJavaCvsCache = par.getCacheName().equals(JavaCvsCache.JAVA_CACHE_NAME); StringTokenizer token = new StringTokenizer(line,"/", false); // NOI18N boolean newBehaviour = false; if (token.countTokens() >= 9) { newBehaviour = true; // NEW BEHAVIOUR.. NEW NUMBER OF TOKENS... } if (line.startsWith("D")) { // NOI18N String name = token.nextToken(); name = token.nextToken(); CvsCacheDir newFile = (CvsCacheDir)par.getSubDir(name); if (newFile == null) { // not found == it's not on the local disk -> it's a shadow file // par.setStatus(JavaCvsStatusManager.NOT_IN_SYNCH); return newFile; } if (!token.hasMoreTokens()) return newFile; String stat = token.nextToken(); newFile.setStatus(stat.intern()); if (newBehaviour) { String tokenStr = token.nextToken(); newFile.setLocker(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setRevision(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setSticky(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setAttr(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N tokenStr = token.nextToken(); int size = 0; try { size = Integer.parseInt(tokenStr); } catch (NumberFormatException exc) { size = 0; } newFile.setSize(size); if (token.hasMoreTokens()) { tokenStr = token.nextToken(); newFile.setDate(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N } if (token.hasMoreTokens()) { tokenStr = token.nextToken(); newFile.setTime(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N } } return newFile; } if (!line.startsWith("/")) { // NOI18N System.out.println("ERROR : Bad cache disk format (CvsCacheFile)"); // NOI18N return null; } if (token.countTokens() < 2) return null; String name = token.nextToken(); CvsCacheFile newFile = (CvsCacheFile)par.getFile(name); String status = token.nextToken().intern(); boolean isNew = false; if (newFile == null) { // not found == it's not on the local disk -> it's a shadow file CvsCacheFile file = new CvsCacheFile(par.getCacheName(), name); isNew = true; newFile = file; // status AI - for all but removed and local change status to NEEDS_CHECKOUT. // only to those that are in the JAVACVS cache.. thus the rela ones.. // those that are created in the CacheUpdatingCommand don't count.. if (isJavaCvsCache) { if (par.getCacheName().equals(JavaCvsCache.JAVA_CACHE_NAME)) { if (status.equals(JavaCvsStatusManager.LOCALLY_REMOVED) || status.equals(JavaCvsStatusManager.LOCAL) || status.equals(JavaCvsStatusManager.UNKNOWN)) { newFile.setStatusNonModifying(status); } else { newFile.setStatusNonModifying(JavaCvsStatusManager.NEEDS_CHECKOUT); } } else { newFile.setStatusNonModifying(status); } } else { newFile.setStatusNonModifying(status); } } else { newFile.setStatusNonModifying(status); } if (newBehaviour) { String tokenStr = token.nextToken(); newFile.setLocker(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setRevision(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setSticky(tokenStr.equals(" ") ? null : tokenStr.intern()); // NOI18N tokenStr = token.nextToken(); newFile.setAttr(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N tokenStr = token.nextToken(); int size = 0; try { size = Integer.parseInt(tokenStr); } catch (NumberFormatException exc) { size = 0; } newFile.setSize(size); tokenStr = token.nextToken(); newFile.setDate(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N tokenStr = token.nextToken(); newFile.setTime(tokenStr.equals(" ") ? null : new String(tokenStr)); // NOI18N } else { //OLD BEHAVIOUR... if (token.hasMoreTokens()) { String tokenStr = token.nextToken(); newFile.setRevision(tokenStr.equals("") ? null : tokenStr.intern()); // NOI18N } } if (!isJavaCvsCache || (isNew && (newFile.getStatus().equals(JavaCvsStatusManager.NEEDS_CHECKOUT) || newFile.getStatus().equals(JavaCvsStatusManager.LOCALLY_REMOVED)))) { // if (par.getCacheName().equals(JavaCvsCache.JAVA_CACHE_NAME)) { // System.out.println("adding non-existent=" + newFile.getName()); par.addFile(newFile, false); //par.setFirstTimer(true); // } } return newFile; } /** set the status.. * @param stat any of the status constants in this class */ public void setStatus (String stat) { String status = getStatus(); //TODO the status changing logic move someplace else. // if (status.equals(LOCAL)) return; // local files don't change status if (JavaCvsStatusManager.LOCALLY_ADDED.equals(status) && JavaCvsStatusManager.LOCALLY_MODIFIED.equals(stat)) return; // for loc added files, ignore modified updates if (JavaCvsStatusManager.NEEDS_PATCH.equals(status) && JavaCvsStatusManager.LOCALLY_MODIFIED.equals(stat)) { status = JavaCvsStatusManager.NEEDS_MERGE; } else { // TODO? other status logic to be added status = stat; } super.setStatus(status); //getParent().setModified(true); } /** does not set the setModified flag on the directory.. should be called * only when reading from disk cache * not modified -> read from disk, populated from local disk. */ public void setStatusNonModifying(String stat) { setStatus(stat); } //------------------------------------------- public String toString(){ return "CvsCacheFile["+ // NOI18N "name='"+getName()+"'"+ // NOI18N "]"; // NOI18N } protected static class CvsPersistentData extends PersistentData { public CvsPersistentData(boolean directory) { super(directory); this.setLocal(true); this.setStatus(null); setLocker(null); setRevision(null); setSticky(null); setAttr(null); setDate(null); setTime(null); } public String writeLineToDisk() { StringBuffer buff = new StringBuffer("/"); // NOI18N buff.append(getName()); buff.append("/"); // NOI18N buff.append(getStatus()); buff.append("/"); // NOI18N buff.append((getLocker() == null) ? " " : getLocker()); // NOI18N buff.append("/"); // NOI18N buff.append((getRevision() == null) ? " " : getRevision()); // NOI18N buff.append("/"); // NOI18N buff.append((getSticky() == null) ? " " : getSticky()); // NOI18N buff.append("/"); // NOI18N buff.append((getAttr() == null) ? " " : getAttr()); // NOI18N buff.append("/"); // NOI18N buff.append(getSize()); buff.append("/"); // NOI18N buff.append((getDate() == null) ? " " : getDate()); // NOI18N buff.append("/"); // NOI18N buff.append((getTime() == null) ? " " : getTime()); // NOI18N //TODO return buff.toString(); } /** * Subclasses need to implement this to store the data into disk cache. */ protected void doWriteToDisk() throws IOException { } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.