/** * @param scannedResult * @throws MWException */ public List<ScannedMaterialDTO> scanMaterialsIn(ScannedResult scannedResult) { List<ScannedMaterialDTO> materialList = new ArrayList<ScannedMaterialDTO>(); Memento memento = scannedResult.getMemento(); // 正規表現でスキャン ../materials/20100102_012345.jpg とか。 String regexp = "\\.\\.\\/materials\\/\\d{8}_\\d{6}\\.(jpg|mov)"; Pattern p = Pattern.compile(regexp); File in = new File(scannedResult.getProductionPath()); try { for (String line : Files.readAllLines(in.toPath(), Charset.forName("MS932"))) { Matcher matcher = p.matcher(line); while (matcher.find()) { File materialPath = new File(matcher.group()); Path path = materialPath.toPath(); String materialId = PathUtil.toMaterialId(path); // dto作成 ScannedMaterialDTO dto = new ScannedMaterialDTO(); dto.setPath(path); dto.setMateiralId(materialId); Material m = em.find(Material.class, materialId); if (m != null) { logger.fine( "メメント[" + in.toString() + "]内の素材[" + path.toString() + "]はMaterialテーブルに登録されています"); dto.setRegisteredMaterial(true); } else { logger.fine( "メメント[" + in.toString() + "]内の素材[" + path.toString() + "]はMaterialテーブルに登録されていません"); dto.setRegisteredMaterial(false); } // memento内のTaggedMaterialsに同一MateiralIdが含まれていたら、既にDB登録済み boolean belongToMemento = false; if (!(memento == null || memento.getTaggedMaterials().isEmpty())) { for (TaggedMaterial tm : memento.getTaggedMaterials()) { if (tm.getId().getMaterialId().equals(materialId)) { belongToMemento = true; } } } dto.setBelongToMemento(belongToMemento); // 結果セットへの追加 materialList.add(dto); } } } catch (IOException e) { throw new MWResourceIOError(e); } return materialList; }