concept G22TravelLogEntry { settable S computerID; settable S computerDescription; settable Timestamp timestamp; settable S gazelleCompilationDate; settable File projectDir; settable long projectSize; settable int fileCount; settable int conceptCount; settable long conceptIDCounter; settable Timestamp lastConceptChange; settable Timestamp lastFileChange; // It will be nice to always put something in here // (Why was this entry made?) settable S action; // these are optional settable S importedFromURL; settable File importedFromFile; settable S backedUpToURL; settable File backedUpToFile; settable S comment; selfType create(G22Utils g22utils) { var cc = g22utils.concepts(); ret new selfType() .computerID(computerID()) .timestamp(tsNow()) .gazelleCompilationDate(g22utils.compilationDate()) .projectDir(g22utils.projectDir()) .conceptCount(countConcepts(cc)) .conceptIDCounter(cc.idCounter) .lastConceptChange(main lastConceptChange(cc)); } void scanProject(G22Utils g22utils) { L files = findAllFiles_noDirs(g22utils.projectDir()); this .lastFileChange(toTimestamp(max(map modificationTime(files)))) .projectSize(longSum fileSize(files)) .fileCount(l(files)); } }