litesoft
@ 939
litesoft / trunk / Java / ScarPlus / src / com / esotericsoftware / filesystem / RootedPathsCollection.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package com.esotericsoftware.filesystem; import java.io.*; import org.litesoft.core.typeutils.Objects; import java.util.*; import com.esotericsoftware.scar.*; public final class RootedPathsCollection { private long mGreatestLastModified; private final Map<File, RootedPaths> mPaths = new HashMap<File, RootedPaths>(); public void add( FilePath pFilePath ) { File zParentDir = pFilePath.getSomeParentDir(); RootedPaths zExistingRootedPaths = mPaths.get( zParentDir ); if ( zExistingRootedPaths == null ) { mPaths.put( zParentDir, zExistingRootedPaths = new RootedPaths( zParentDir ) ); } zExistingRootedPaths.addCanonicalRelativePath( pFilePath.getFileSubPath() ); mGreatestLastModified = Math.max( mGreatestLastModified, zExistingRootedPaths.getGreatestLastModified() ); } public void add( RootedPaths pRootedPaths ) { Utils.assertNotNull( "RootedPaths", pRootedPaths ); File zRootDirectory = pRootedPaths.getCanonicalRootDirectory(); RootedPaths zExistingRootedPaths = mPaths.get( zRootDirectory ); if ( zExistingRootedPaths == null ) { mPaths.put( zRootDirectory, zExistingRootedPaths = pRootedPaths ); } else { zExistingRootedPaths.mergeIn( pRootedPaths ); } mGreatestLastModified = Math.max( mGreatestLastModified, zExistingRootedPaths.getGreatestLastModified() ); } public long getGreatestLastModified() { return mGreatestLastModified; } public RootedPaths[] getRootedPaths() { return mPaths.values().toArray( new RootedPaths[mPaths.size()] ); } public boolean isEmpty() { return mPaths.isEmpty() || (count() == 0); } public int count() { int zCount = 0; for ( RootedPaths zPaths : mPaths.values() ) { zCount += zPaths.count(); } return zCount; } public List<FilePath> collectPaths( List<FilePath> pPaths ) { for ( RootedPaths zPaths : mPaths.values() ) { zPaths.collectPaths( pPaths ); } return pPaths; } /* Package Friendly */ void mergeIn( RootedPathsCollection them ) { for ( RootedPaths zPaths : them.mPaths.values() ) { add( zPaths ); } } } |