88 override def toString: String = base_dir.expand.toString |
91 override def toString: String = base_dir.expand.toString |
89 |
92 |
90 val main_dir: Path = base_dir + Path.explode("thys") |
93 val main_dir: Path = base_dir + Path.explode("thys") |
91 |
94 |
92 |
95 |
93 /* entries with metadata and sessions */ |
96 /* entries and sessions */ |
94 |
97 |
95 val entries: List[AFP.Entry] = |
98 val entries_map: SortedMap[String, AFP.Entry] = |
96 { |
99 { |
97 val entry_metadata = AFP.Metadata.read(base_dir + Path.explode("metadata/metadata")) |
100 val entry_metadata = AFP.Metadata.read(base_dir + Path.explode("metadata/metadata")) |
98 |
101 |
99 val entries = |
102 val entries = |
100 (for (name <- Sessions.parse_roots(main_dir + Sessions.ROOTS)) yield { |
103 for (name <- Sessions.parse_roots(main_dir + Sessions.ROOTS)) yield { |
101 val metadata = |
104 val metadata = |
102 entry_metadata.getOrElse(name, error("Entry without metadata: " + quote(name))) |
105 entry_metadata.getOrElse(name, error("Entry without metadata: " + quote(name))) |
103 val sessions = |
106 val sessions = |
104 Sessions.parse_root_entries(main_dir + Path.explode(name) + Sessions.ROOT).map(_.name) |
107 Sessions.parse_root_entries(main_dir + Path.explode(name) + Sessions.ROOT).map(_.name) |
105 AFP.Entry(name, metadata, sessions) |
108 AFP.Entry(name, metadata, sessions) |
106 }).sortBy(_.name) |
109 } |
107 |
110 |
108 val entry_set = entries.iterator.map(_.name).toSet |
111 val entries_map = |
|
112 (SortedMap.empty[String, AFP.Entry] /: entries)({ case (m, e) => m + (e.name -> e) }) |
|
113 |
109 val extra_metadata = |
114 val extra_metadata = |
110 (for ((name, _) <- entry_metadata.iterator if !entry_set(name)) yield name).toList.sorted |
115 (for ((name, _) <- entry_metadata.iterator if !entries_map.isDefinedAt(name)) yield name). |
111 if (extra_metadata.nonEmpty) error("Meta data without entry: " + commas_quote(extra_metadata)) |
116 toList.sorted |
|
117 if (extra_metadata.nonEmpty) |
|
118 error("Meta data without entry: " + commas_quote(extra_metadata)) |
112 |
119 |
113 entries |
120 entries_map |
114 } |
121 } |
115 |
122 |
|
123 val entries: List[AFP.Entry] = entries_map.toList.map(_._2) |
116 val sessions: List[String] = entries.flatMap(_.sessions) |
124 val sessions: List[String] = entries.flatMap(_.sessions) |
117 |
125 |
118 val sessions_structure: Sessions.Structure = |
126 val sessions_structure: Sessions.Structure = |
119 Sessions.load_structure(options, dirs = List(main_dir)). |
127 Sessions.load_structure(options, dirs = List(main_dir)). |
120 selection(Sessions.Selection(sessions = sessions.toList)) |
128 selection(Sessions.Selection(sessions = sessions.toList)) |