- Timestamp:
- 06/22/13 21:51:33 (11 years ago)
- Location:
- java/main
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main
-
Property
svn:ignore
set to
target
-
Property
svn:ignore
set to
-
java/main/src/main/java/com/framsticks/dumping/SaveStream.java
r78 r84 4 4 import com.framsticks.core.Path; 5 5 import com.framsticks.params.AccessInterface; 6 import com.framsticks.params.CompositeParam; 6 7 import com.framsticks.params.FramsClass; 7 8 import com.framsticks.params.ListAccess; 8 import com.framsticks.params.Param;9 import com.framsticks.params.types.CompositeParam;10 9 import com.framsticks.params.SinkInterface; 11 10 import com.framsticks.parsers.Savers; 12 11 import com.framsticks.core.Instance; 13 12 import com.framsticks.util.*; 13 import com.framsticks.util.dispatching.Dispatching; 14 14 import org.apache.log4j.Logger; 15 15 16 16 import java.util.HashSet; 17 17 import java.util.Set; 18 import static com.framsticks.util.lang.Containers.filterInstanceof; 18 19 19 20 /** … … 22 23 public class SaveStream { 23 24 24 private final static Logger LOGGER= Logger.getLogger(SaveStream.class.getName());25 private final static Logger log = Logger.getLogger(SaveStream.class.getName()); 25 26 26 27 28 29 30 27 protected final SinkInterface sink; 28 protected final Instance instance; 29 protected final StateFunctor stateFunctor; 30 protected final Stopwatch stopwatch = new Stopwatch(); 31 protected final Set<FramsClass> storedInfo = new HashSet<FramsClass>(); 31 32 32 33 private int dispatched = 0; 33 34 34 35 36 37 38 35 public SaveStream(SinkInterface sink, Instance instance, Path root, StateFunctor stateFunctor) { 36 assert Dispatching.isThreadSafe(); 37 this.sink = sink; 38 this.instance = instance; 39 this.stateFunctor = stateFunctor; 39 40 dispatchWrite(root); 40 41 } 41 42 42 43 protected void dispatchWrite(final Path path) { … … 50 51 } 51 52 52 53 54 LOGGER.info("stored in " + stopwatch);55 56 53 protected void finished() { 54 assert instance.isActive(); 55 log.info("stored in " + stopwatch); 56 stateFunctor.call(null); 57 } 57 58 58 59 60 61 LOGGER.debug("path " + path + " is not resolved - skipping");62 63 59 public void write(final Path path) { 60 assert instance.isActive(); 61 if (!path.isResolved()) { 62 log.debug("path " + path + " is not resolved - skipping"); 63 } else { 64 AccessInterface access = instance.bindAccess(path); 64 65 assert access != null; 65 FramsClass framsClass = access.getFramsClass(); 66 assert framsClass != null; 67 if (!storedInfo.contains(framsClass)) { 68 storedInfo.add(framsClass); 69 sink.print("info ").print(path.getTextual()).breakLine(); 70 sink.print("file").breakLine(); 71 Savers.saveFramsClass(sink, framsClass); 72 sink.print("eof").breakLine(); 73 sink.print("ok").breakLine(); 74 } 75 if (!(access instanceof ListAccess)) { 76 sink.print("get ").print(path.getTextual()).breakLine(); 77 sink.print("file").breakLine(); 78 //stream.print("#" + access.getSelected().getClass().getCanonicalName() + "\n"); 79 access.save(sink); 80 sink.print("eof").breakLine(); 81 sink.print("ok").breakLine(); 82 } 83 for (Param p : access.getParams()) { 84 if (p instanceof CompositeParam) { 85 CompositeParam childParam = (CompositeParam)p; 86 final Path childPath = path.appendNode(new Node(childParam, access.get(childParam, Object.class))); 87 if (childPath.isResolved() && instance.getInfoFromCache(childPath) != null) { 88 dispatchWrite(childPath); 89 } 90 } 91 } 92 } 93 --dispatched; 94 if (dispatched == 0) { 95 finished(); 96 } 97 } 66 FramsClass framsClass = access.getFramsClass(); 67 assert framsClass != null; 68 if (!storedInfo.contains(framsClass)) { 69 storedInfo.add(framsClass); 70 sink.print("info ").print(path.getTextual()).breakLine(); 71 sink.print("file").breakLine(); 72 Savers.saveFramsClass(sink, framsClass); 73 sink.print("eof").breakLine(); 74 sink.print("ok").breakLine(); 75 } 76 if (!(access instanceof ListAccess)) { 77 sink.print("get ").print(path.getTextual()).breakLine(); 78 sink.print("file").breakLine(); 79 //stream.print("#" + access.getSelected().getClass().getCanonicalName() + "\n"); 80 access.save(sink); 81 sink.print("eof").breakLine(); 82 sink.print("ok").breakLine(); 83 } 84 for (CompositeParam p : filterInstanceof(access.getParams(), CompositeParam.class)) { 85 final Path childPath = path.appendNode(new Node(p, access.get(p, Object.class))); 86 if (childPath.isResolved() && instance.getInfoFromCache(childPath) != null) { 87 dispatchWrite(childPath); 88 } 89 } 90 } 91 --dispatched; 92 if (dispatched == 0) { 93 finished(); 94 } 95 } 98 96 }
Note: See TracChangeset
for help on using the changeset viewer.