cz.cas.lib.proarc.common.dao.Batch - java examples

Here are the examples of the java api cz.cas.lib.proarc.common.dao.Batch taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

59 Examples 7

19 View Complete Implementation : ArchiveImport.java
Copyright GNU General Public License v3.0
Author : proarc
public void load(ImportOptions importConfig) throws Exception {
    File importFolder = importConfig.getImportFolder();
    List<File> metsFiles = ArchiveScanner.findMets(importFolder);
    consume(metsFiles, importConfig);
    Batch batch = importConfig.getBatch();
    batch.setState(State.LOADED);
    isession.getImportManager().update(batch);
}

19 View Complete Implementation : ImportBatchManagerTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testMissingBatchFolderStatus() throws Exception {
    // temp.setDeleteOnExit(false);
    DaoFactory df = EasyMock.createMock(DaoFactory.clreplaced);
    ImportBatchManager ibm = new ImportBatchManager(appConf, df);
    File batchRoot = new File(ibm.getBatchRoot());
    File batchFolder = new File(batchRoot, "importFolder");
    batchFolder.mkdir();
    Batch b = new Batch();
    b.setId(1);
    b.setCreate(new Timestamp(System.currentTimeMillis()));
    b.setDevice("device");
    b.setFolder(ibm.relativizeBatchFile(batchFolder));
    b.setGenerateIndices(true);
    b.setState(State.LOADING);
    ImportFolderStatus result = ibm.getFolderStatus(b);
    replacedertNull(result);
}

19 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Starts the process.
 * @return the import batch
 */
public Batch start() {
    Batch batch = importConfig.getBatch();
    if (batch == null) {
        throw new IllegalStateException("run prepare first!");
    }
    File importFolder = importConfig.getImportFolder();
    try {
        try {
            ImportFileScanner.validateImportFolder(importFolder);
            ImportFolderStatus folderStatus = batchManager.getFolderStatus(batch);
            if (folderStatus == null) {
                batchManager.updateFolderStatus(batch);
            } else if (!batch.getId().equals(folderStatus.getBatchId())) {
                throw new IllegalStateException(String.format("The folder tracked by another batch import!\nfolder: %s\nfound ID: %s", importFolder, folderStatus.getBatchId()));
            }
        } catch (Throwable ex) {
            return logBatchFailure(batch, ex);
        }
        File targetFolder = createTargetFolder(importFolder);
        importConfig.setTargetFolder(targetFolder);
        importConfig.getImporter().start(importConfig, batchManager);
        if (batch.getState() == Batch.State.LOADING) {
            batch.setState(Batch.State.LOADED);
        }
        batch = batchManager.update(batch);
        return batch;
    } catch (InterruptedException ex) {
        // rollback files on batch resume
        return null;
    } catch (Throwable t) {
        return logBatchFailure(batch, t);
    }
}

19 View Complete Implementation : KrameriusImport.java
Copyright GNU General Public License v3.0
Author : proarc
public void load(ImportOptions importConfig) throws Exception {
    File importFolder = importConfig.getImportFolder();
    List<File> importFiles = KrameriusScanner.findImportableFiles(importFolder);
    consume(importFiles, importConfig);
    Batch batch = importConfig.getBatch();
    batch.setState(Batch.State.LOADED);
    isession.getImportManager().update(batch);
}

19 View Complete Implementation : ArchiveImport.java
Copyright GNU General Public License v3.0
Author : proarc
public void ingest(ImportOptions importConfig) throws Exception {
    ImportBatchManager ibm = ImportBatchManager.getInstance();
    Batch batch = importConfig.getBatch();
    AppConfiguration config = AppConfigurationFactory.getInstance().defaultInstance();
    FedoraImport ingest = new FedoraImport(config, RemoteStorage.getInstance(), ibm, null);
    ingest.importBatch(batch, importConfig.getUsername(), null);
}

19 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public boolean excludeBatchObject(Batch batch, String pid) {
    return excludeBatchObject(batch, pid == null ? null : Collections.singleton(pid));
}

19 View Complete Implementation : DigitalObjectManager.java
Copyright GNU General Public License v3.0
Author : proarc
public FedoraObject find(String pid, Integer batchId) throws DigitalObjectNotFoundException {
    Batch batch = null;
    if (batchId != null) {
        batch = ibm.get(batchId);
        if (batch == null) {
            throw new DigitalObjectNotFoundException(pid, batchId, null, null, null);
        // throw RestException.plainNotFound(DigitalObjectResourceApi.MEMBERS_ITEM_BATCHID, String.valueOf(batchId));
        }
    }
    return find2(pid, batch);
}

19 View Complete Implementation : DigitalObjectManager.java
Copyright GNU General Public License v3.0
Author : proarc
public FedoraObject find2(String pid, Batch batch) throws DigitalObjectNotFoundException {
    FedoraObject fobject;
    if (batch != null) {
        // XXX move to LocalObject.flush or stream.write
        // if (!readonly) {
        // ImportResource.checkBatchState(batch);
        // }
        if (pid == null || ImportBatchManager.ROOT_ITEM_PID.equals(pid)) {
            fobject = ibm.getRootObject(batch);
        } else {
            BatchItemObject item = ibm.findBatchObject(batch.getId(), pid);
            if (item == null) {
                throw new DigitalObjectNotFoundException(pid, batch.getId(), null, null, null);
            // throw RestException.plainNotFound(DigitalObjectResourceApi.DIGITALOBJECT_PID, pid);
            }
            fobject = new LocalStorage().load(pid, item.getFile());
        }
    } else {
        if (pid == null) {
            throw new NullPointerException("pid");
        }
        fobject = getRemotes().find(pid);
    }
    return fobject;
}

19 View Complete Implementation : ImportBatchManagerTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testBatchFolderStatus() throws Exception {
    // temp.setDeleteOnExit(false);
    DaoFactory df = EasyMock.createMock(DaoFactory.clreplaced);
    ImportBatchManager ibm = new ImportBatchManager(appConf, df);
    File batchRoot = new File(ibm.getBatchRoot());
    File batchFolder = new File(batchRoot, "importFolder");
    batchFolder.mkdir();
    Batch b = new Batch();
    b.setId(1);
    b.setCreate(new Timestamp(System.currentTimeMillis()));
    b.setDevice("device");
    b.setFolder(ibm.relativizeBatchFile(batchFolder));
    b.setGenerateIndices(true);
    b.setState(State.LOADING);
    ibm.updateFolderStatus(b);
    ImportFolderStatus result = ibm.getFolderStatus(b);
    replacedertEquals(b.getId(), result.getBatchId());
}

19 View Complete Implementation : FedoraImport.java
Copyright GNU General Public License v3.0
Author : proarc
public Batch importBatch(Batch batch, String importer, String message) throws DigitalObjectException {
    checkParent(batch.getParentPid());
    boolean repair = false;
    if (batch.getState() == Batch.State.INGESTING_FAILED) {
        repair = true;
        batch.setLog(null);
    } else if (batch.getState() != Batch.State.LOADED) {
        throw new IllegalStateException("Invalid batch state: " + batch);
    }
    batch.setState(Batch.State.INGESTING);
    batch = ibm.update(batch);
    String parentPid = batch.getParentPid();
    long startTime = System.currentTimeMillis();
    ArrayList<String> ingestedPids = new ArrayList<String>();
    try {
        boolean itemFailed = imporreplacedems(batch, importer, ingestedPids, repair);
        addParentMembers(batch, parentPid, ingestedPids, message);
        batch.setState(itemFailed ? Batch.State.INGESTING_FAILED : Batch.State.INGESTED);
    } catch (Throwable t) {
        LOG.log(Level.SEVERE, String.valueOf(batch), t);
        batch.setState(Batch.State.INGESTING_FAILED);
        batch.setLog(ImportBatchManager.toString(t));
    } finally {
        batch = ibm.update(batch);
        LOG.log(Level.FINE, "Total ingest time {0} ms. Ingested items: {1}.\n{2}", new Object[] { System.currentTimeMillis() - startTime, ingestedPids.size(), batch });
    }
    return batch;
}

19 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
private void removeBatchItems(Batch batch) {
    batchManager.resetBatch(batch);
}

19 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
private Batch logBatchFailure(Batch batch, Throwable t) {
    return logBatchFailure(batchManager, batch, t);
}

18 View Complete Implementation : FedoraImport.java
Copyright GNU General Public License v3.0
Author : proarc
private void addParentMembers(Batch batch, String parent, List<String> pids, String message) throws DigitalObjectException {
    if (parent == null || pids.isEmpty()) {
        return;
    }
    ConfigurationProfile profile = findImportProfile(batch.getId(), batch.getProfileId());
    ImportProfile importProfile = profile != null ? config.getImportConfiguration(profile) : config.getImportConfiguration();
    if (ConfigurationProfile.DEFAULT_SOUNDRECORDING_IMPORT.equals(batch.getProfileId()) && importProfile.getCreateModelsHierarchy()) {
        createHierarchy(batch, pids, parent, message);
    }
    if (pids.size() != 0) {
        setParent(parent, pids, message);
    }
}

18 View Complete Implementation : FileSetImport.java
Copyright GNU General Public License v3.0
Author : proarc
private void consumeFileSets(Batch batch, List<FileSet> fileSets, ImportOptions ctx) throws InterruptedException {
    ImportBatchManager batchManager = ImportBatchManager.getInstance();
    long start = System.currentTimeMillis();
    for (FileSet fileSet : fileSets) {
        if (Thread.interrupted()) {
            throw new InterruptedException();
        }
        BatchItemObject item = consumeFileSet(fileSet, ctx);
        String pid = item == null ? null : item.getPid();
        FileState state = item == null ? FileState.SKIPPED : FileState.OK;
        batchManager.addFileItem(batch.getId(), pid, state, fileSet.getFiles());
        if (item != null) {
            if (ObjectState.LOADING_FAILED == item.getState()) {
                batch.setState(Batch.State.LOADING_FAILED);
                batch.setLog(item.getFile() + "\n" + item.getLog());
                return;
            }
        }
    }
    LOG.log(Level.FINE, "Total time: {0} ms", System.currentTimeMillis() - start);
}

18 View Complete Implementation : FileSetImport.java
Copyright GNU General Public License v3.0
Author : proarc
@Override
public void start(ImportOptions importConfig, ImportBatchManager batchManager) throws Exception {
    File importFolder = importConfig.getImportFolder();
    Batch batch = importConfig.getBatch();
    ImportFileScanner scanner = new ImportFileScanner();
    List<File> files = scanner.findDigitalContent(importFolder);
    List<FileSet> fileSets = ImportFileScanner.getFileSets(files);
    importConfig.setJhoveContext(JhoveUtility.createContext());
    try {
        consumeFileSets(batch, fileSets, importConfig);
        if ("profile.chronicle".equals(importConfig.getConfig().getProfileId()) && importConfig.getConfig().getCreateModelsHierarchy()) {
            createObject(fileSets, ChroniclePlugin.MODEL_CHRONICLEVOLUME, batchManager, importConfig);
        }
    } finally {
        importConfig.getJhoveContext().destroy();
    }
}

18 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public boolean excludeBatchObject(Batch batch, Collection<String> pids) {
    if (batch == null) {
        throw new NullPointerException("batch");
    }
    if (pids == null || pids.isEmpty()) {
        throw new IllegalArgumentException("pid");
    }
    BatchItemDao bitemDao = daos.createBatchItem();
    Transaction tx = daos.createTransaction();
    bitemDao.setTransaction(tx);
    try {
        List<BatchItem> items;
        if (pids.isEmpty()) {
            items = bitemDao.find(batch.getId(), null, null, null, BatchItem.Type.OBJECT.name());
            items = filterBatchItems(items, pids);
        } else {
            items = bitemDao.find(batch.getId(), pids.iterator().next(), null, null, BatchItem.Type.OBJECT.name());
        }
        if (items.isEmpty()) {
            return false;
        }
        List<BatchItemObject> objs = toBatchObjects(items);
        for (BatchItemObject obj : objs) {
            obj.setState(ObjectState.EXCLUDED);
            bitemDao.update(obj.gereplacedem());
        }
        removeChildRelation(batch, null, pids);
        tx.commit();
        return true;
    } catch (Throwable ex) {
        tx.rollback();
        throw new IllegalStateException(String.format("pid: %s, %s", pids, batch), ex);
    } finally {
        tx.close();
    }
}

18 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Gets batch import folder status.
 * @param batch
 * @return status or {@code null} in case of empty file (backward compatibility)
 * @throws FileNotFoundException missing batch import folder
 */
public ImportFolderStatus getFolderStatus(Batch batch) throws FileNotFoundException {
    File importFolder = resolveBatchFile(batch.getFolder());
    ImportFileScanner.validateImportFolder(importFolder);
    File f = new File(importFolder, ImportFileScanner.IMPORT_STATE_FILENAME);
    ImportFolderStatus ifs = null;
    if (f.exists() && f.length() > 0) {
        ifs = JAXB.unmarshal(f, ImportFolderStatus.clreplaced);
    }
    return ifs;
}

18 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
private void prepare(String description, UserProfile user) throws IOException {
    // validate import folder
    File importFolder = importConfig.getImportFolder();
    ImportFileScanner.validateImportFolder(importFolder);
    // check import state
    lockImportFolder(importFolder);
    boolean transactionFailed = true;
    try {
        if (getTargetFolder(importFolder).exists()) {
            throw new IOException("Folder already exists: " + getTargetFolder(importFolder));
        }
        int estimateItemNumber = importConfig.getImporter().estimateItemNumber(importConfig);
        if (estimateItemNumber == 0) {
            throw new IOException("Nothing to import " + importFolder);
        }
        Batch batch = batchManager.add(importFolder, description, user, estimateItemNumber, importConfig);
        importConfig.setBatch(batch);
        transactionFailed = false;
    } finally {
        if (transactionFailed) {
            ImportFileScanner.rollback(importFolder);
        }
    }
}

18 View Complete Implementation : EmpireBatchDao.java
Copyright GNU General Public License v3.0
Author : proarc
private Batch getBeanProperties(DBRecordData record, Batch instance) {
    Batch batch = instance != null ? instance : new Batch();
    record.getBeanProperties(batch);
    return batch;
}

18 View Complete Implementation : FedoraImport.java
Copyright GNU General Public License v3.0
Author : proarc
private void createHierarchy(Batch batch, List<String> pids, String doreplacedentPid, String message) {
    List<BatchItemObject> batchItems = ibm.findBatchObjects(batch.getId(), null);
    ArrayList<Hierarchy> songsPid = new ArrayList<>();
    ArrayList<ArrayList<Hierarchy>> tracksPid = new ArrayList<>();
    boolean hierarchyCreated = createPidHierarchy(batchItems, doreplacedentPid, songsPid, tracksPid, pids);
    if (!hierarchyCreated) {
        return;
    }
    try {
        if (tracksPid.size() == 0) {
            createModels(doreplacedentPid, songsPid, message);
        } else if (tracksPid.size() != 0) {
            createModels(doreplacedentPid, songsPid, tracksPid, message);
        }
    } catch (DigitalObjectException ex) {
        LOG.log(Level.WARNING, "Nepodarilo se automaticky vytvorit hierarchii objektu, protoze se nepodarilo vytvorit objekt " + ex.getPid());
        return;
    }
    return;
}

18 View Complete Implementation : FedoraImport.java
Copyright GNU General Public License v3.0
Author : proarc
private boolean imporreplacedems(Batch batch, String importer, List<String> ingests, boolean repair) throws DigitalObjectException {
    List<BatchItemObject> batchItems = ibm.findBatchObjects(batch.getId(), null);
    if (batch.getParentPid() != null) {
        // in case of including items in a parent object it is neccessary to sort the ingests
        batchItems = sorreplacedems(batch, batchItems);
    }
    for (BatchItemObject item : batchItems) {
        item = imporreplacedem(item, importer, repair);
        if (item != null) {
            if (ObjectState.INGESTING_FAILED == item.getState()) {
                batch.setLog(item.getLog());
                return true;
            } else {
                ingests.add(item.getPid());
            }
        }
    }
    return false;
}

17 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public Batch update(Batch update) {
    if (update == null) {
        throw new NullPointerException();
    }
    BatchDao batchDao = daos.createBatch();
    Transaction tx = daos.createTransaction();
    batchDao.setTransaction(tx);
    try {
        batchDao.update(update);
        tx.commit();
        return update;
    } catch (Throwable t) {
        tx.rollback();
        throw new IllegalStateException(String.valueOf(update), t);
    } finally {
        tx.close();
    }
}

17 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public void updateFolderStatus(Batch batch) {
    File importFolder = resolveBatchFile(batch.getFolder());
    ImportFolderStatus ifs = new ImportFolderStatus(batch);
    JAXB.marshal(ifs, new File(importFolder, ImportFileScanner.IMPORT_STATE_FILENAME));
}

17 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
private static Batch logBatchFailure(ImportBatchManager batchManager, Batch batch, Throwable t) {
    LOG.log(Level.SEVERE, batch.toString(), t);
    batch.setState(Batch.State.LOADING_FAILED);
    batch.setLog(ImportBatchManager.toString(t));
    return batchManager.update(batch);
}

17 View Complete Implementation : EmpireBatchDaoTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testFindForPid() throws Exception {
    IDataSet db = database(support.loadFlatXmlDataStream(getClreplaced(), "user.xml"), support.loadFlatXmlDataStream(getClreplaced(), "batch.xml"), support.loadFlatXmlDataStream(getClreplaced(), "batch_item.xml"));
    support.cleanInsert(support.getConnection(tx), db);
    tx.commit();
    Batch batch = dao.findForPid("uuid:4a7c2e50-af36-11dd-9643-000d606f5dc6");
    replacedertNotNull(batch);
}

17 View Complete Implementation : EmpireBatchDaoTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testFindLoadingBatches() throws Exception {
    IDataSet db = database(support.loadFlatXmlDataStream(getClreplaced(), "user.xml"), support.loadFlatXmlDataStream(getClreplaced(), "batch.xml"));
    support.cleanInsert(support.getConnection(tx), db);
    tx.commit();
    List<Batch> result = dao.findLoadingBatches();
    replacedertEquals(2, result.size());
    Batch batch = dao.find(1);
    batch.setState(State.LOADED);
    dao.update(batch);
    result = dao.findLoadingBatches();
    replacedertEquals(1, result.size());
}

17 View Complete Implementation : EmpireBatchDaoTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testFind() throws Exception {
    IDataSet db = database(support.loadFlatXmlDataStream(getClreplaced(), "user.xml"), support.loadFlatXmlDataStream(getClreplaced(), "batch.xml"));
    support.cleanInsert(support.getConnection(tx), db);
    tx.commit();
    Batch result = dao.find(1);
    replacedertNotNull(result);
    replacedertEquals(1, (int) result.getId());
    replacedertEquals(ConfigurationProfile.DEFAULT, result.getProfileId());
}

17 View Complete Implementation : ImportResource.java
Copyright GNU General Public License v3.0
Author : proarc
public static void checkBatchState(Batch batch) throws RestException {
    if (batch.getState() != Batch.State.LOADED) {
        throw RestException.plainText(Status.FORBIDDEN, String.format("Batch %s is not editable! Unexpected state: %s", batch.getId(), batch.getState()));
    }
}

17 View Complete Implementation : ImportResource.java
Copyright GNU General Public License v3.0
Author : proarc
@DELETE
@Path(ImportResourceApi.BATCH_PATH + '/' + ImportResourceApi.BATCHITEM_PATH)
@Produces(MediaType.APPLICATION_JSON)
public SmartGwtResponse<PageView.Item> deleteBatchItem(@QueryParam(ImportResourceApi.BATCHITEM_BATCHID) Integer batchId, @QueryParam(ImportResourceApi.BATCHITEM_PID) Set<String> pids) {
    boolean changed = false;
    if (batchId != null && pids != null && !pids.isEmpty()) {
        Batch batch = importManager.get(batchId);
        if (batch != null) {
            checkBatchState(batch);
            changed = importManager.excludeBatchObject(batch, pids);
        }
    }
    if (changed) {
        ArrayList<Item> deletedItems = new ArrayList<PageView.Item>(pids.size());
        for (String pid : pids) {
            deletedItems.add(new PageView.Item(batchId, null, pid, null, null, null, null, 0, null, null));
        }
        return new SmartGwtResponse<Item>(deletedItems);
    } else {
        throw RestException.plainText(Status.NOT_FOUND, "Batch item not found!");
    }
}

16 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
boolean removeChildRelation(Batch batch, String parentPid, Collection<String> childPid) throws DigitalObjectException {
    if (batch == null) {
        throw new NullPointerException("batch");
    }
    LocalObject rootObject;
    if (parentPid == null) {
        rootObject = getRootObject(batch);
    } else {
        throw new UnsupportedOperationException();
    }
    RelationEditor relationEditor = new RelationEditor(rootObject);
    List<String> members = relationEditor.getMembers();
    boolean changed = members.removeAll(childPid);
    if (changed) {
        relationEditor.setMembers(members);
        relationEditor.write(relationEditor.getLastModified(), null);
        rootObject.flush();
    }
    return changed;
}

16 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Clears all batch items and RELS-EXTs
 *
 * @param batch batch to reset
 */
public void resetBatch(Batch batch) {
    if (batch == null) {
        throw new NullPointerException("batch");
    }
    batch.setState(State.LOADING);
    batch.setLog(null);
    BatchDao dao = daos.createBatch();
    BatchItemDao itemDao = daos.createBatchItem();
    Transaction tx = daos.createTransaction();
    dao.setTransaction(tx);
    itemDao.setTransaction(tx);
    try {
        dao.update(batch);
        itemDao.removeItems(batch.getId());
        tx.commit();
    } catch (Throwable t) {
        tx.rollback();
        throw new IllegalStateException(String.format("batch: %s", batch), t);
    } finally {
        tx.close();
    }
}

16 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public LocalObject getRootObject(Batch batch) {
    File folder = resolveBatchFile(batch.getFolder());
    LocalStorage storage = new LocalStorage();
    File targetBatchFolder = ImportProcess.getTargetFolder(folder);
    if (!targetBatchFolder.exists()) {
        throw new IllegalStateException(String.format("Cannot resolve folder path: %s for %s!", targetBatchFolder, batch));
    }
    File root = new File(targetBatchFolder, ROOT_ITEM_FILENAME);
    LocalObject loRoot;
    if (root.exists()) {
        loRoot = storage.load(ROOT_ITEM_PID, root);
    } else {
        loRoot = storage.create(ROOT_ITEM_PID, root);
    }
    return loRoot;
}

16 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
private static ConfigurationProfile resolveProfile(Batch batch, Profiles profiles) {
    String profileId = batch.getProfileId();
    if (profileId == null) {
        profileId = ConfigurationProfile.DEFAULT;
    }
    ConfigurationProfile profile = profiles.getProfile(ImportProfile.PROFILES, profileId);
    String err = null;
    if (profile == null) {
        err = String.format("Cannot resume batch %s! Missing profile %s." + " Check proarc.cfg and %s registrations.", batch.getId(), profileId, ImportProfile.PROFILES);
    } else if (profile.getError() != null) {
        err = String.format("Cannot resume batch %s! Check proarc.cfg.\n%s\nProfile error: %s", new Object[] { batch.getId(), profile, profile.getError() });
    }
    if (err != null) {
        throw new IllegalStateException(err);
    }
    return profile;
}

16 View Complete Implementation : EmpireBatchDaoTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test(expected = ConcurrentModificationException.clreplaced)
public void testUpdateConcurrently() throws Exception {
    IDataSet db = database(support.loadFlatXmlDataStream(getClreplaced(), "user.xml"), support.loadFlatXmlDataStream(getClreplaced(), "batch.xml"));
    support.cleanInsert(support.getConnection(tx), db);
    tx.commit();
    Batch batch = dao.find(1);
    State expectedState = State.INGESTING;
    batch.setState(expectedState);
    String expectedLog = "updated log";
    batch.setLog(expectedLog);
    Timestamp timestamp = batch.getTimestamp();
    Transaction tx2 = daos.createTransaction();
    BatchDao dao2 = daos.createBatch();
    dao2.setTransaction(tx2);
    try {
        Batch batch2 = dao2.find(1);
        batch2.setState(State.INGESTING_FAILED);
        batch2.setLog("concurrent update");
        dao2.update(batch2);
        tx2.commit();
    } finally {
        tx2.close();
    }
    dao.update(batch);
    tx.commit();
}

16 View Complete Implementation : EmpireBatchDaoTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testUpdate() throws Exception {
    IDataSet db = database(support.loadFlatXmlDataStream(getClreplaced(), "user.xml"), support.loadFlatXmlDataStream(getClreplaced(), "batch.xml"));
    support.cleanInsert(support.getConnection(tx), db);
    tx.commit();
    Batch batch = dao.find(1);
    State expectedState = State.INGESTING;
    batch.setState(expectedState);
    String expectedLog = "updated log";
    batch.setLog(expectedLog);
    Timestamp timestamp = batch.getTimestamp();
    dao.update(batch);
    tx.commit();
    batch = dao.find(1);
    replacedertEquals(expectedState, batch.getState());
    replacedertEquals(expectedLog, batch.getLog());
    replacedertTrue(timestamp.before(batch.getTimestamp()));
}

16 View Complete Implementation : WaveImporterTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testMissingRequiredContent() throws IOException {
    replacedertTrue(uc1.delete());
    replacedertTrue(config.getImportConfiguration().getRequiredDatastreamId().contains(BinaryEditor.NDK_ARCHIVAL_ID));
    File targetFolder = ImportProcess.createTargetFolder(temp.getRoot());
    replacedertTrue(targetFolder.exists());
    ImportOptions ctx = new ImportOptions(ac1.getParentFile(), "scanner:scanner1", true, junit, config.getImportConfiguration());
    ctx.setTargetFolder(targetFolder);
    Batch batch = new Batch();
    batch.setId(1);
    batch.setFolder(ibm.relativizeBatchFile(ac1.getParentFile()));
    ctx.setBatch(batch);
    FileSet fileSet = ImportFileScanner.getFileSets(Arrays.asList(ac1)).get(0);
    ctx.setJhoveContext(jhoveContext);
    WaveImporter waveImporter = new WaveImporter(ibm);
    BatchItemObject result = waveImporter.consume(fileSet, ctx);
    replacedertEquals(ObjectState.LOADING_FAILED, result.getState());
    String log = result.getLog();
    replacedertNotNull(log);
    replacedertTrue(log, log.contains("Missing audio user copy: "));
}

16 View Complete Implementation : EmpireBatchDao.java
Copyright GNU General Public License v3.0
Author : proarc
@Override
public void update(Batch batch) throws ConcurrentModificationException {
    DBRecord record = new DBRecord();
    Connection c = getConnection();
    if (batch.getId() == null) {
        record.create(table);
        Timestamp now = new Timestamp(System.currentTimeMillis());
        batch.setTimestamp(now);
    } else {
        record.read(table, batch.getId(), c);
    }
    record.setBeanValues(batch);
    try {
        record.update(c);
    } catch (RecordUpdateInvalidException ex) {
        throw new ConcurrentModificationException(ex);
    }
    getBeanProperties(record, batch);
}

16 View Complete Implementation : FedoraImport.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Sorts the batch items according to the RELS-EXT members of the parent object.
 */
private ArrayList<BatchItemObject> sorreplacedems(Batch batch, List<BatchItemObject> batchItems) throws DigitalObjectException {
    LocalObject root = ibm.getRootObject(batch);
    RelationEditor rootRels = new RelationEditor(root);
    List<String> batchMemberPids = rootRels.getMembers();
    ArrayList<BatchItemObject> result = new ArrayList<BatchItemObject>(batchItems.size());
    for (String member : batchMemberPids) {
        if (batchItems.isEmpty()) {
            throw new DigitalObjectException(member, batch.getId(), null, String.format("Unknown %s in %s", member, root.getPid()), null);
        }
        for (int i = 0; i < batchItems.size(); i++) {
            BatchItemObject item = batchItems.get(i);
            if (member.equals(item.getPid())) {
                result.add(item);
                batchItems.remove(i);
                break;
            }
        }
    }
    return result;
}

15 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public boolean addChildRelation(Batch batch, String parentPid, String childPid) throws DigitalObjectException {
    if (batch == null) {
        throw new NullPointerException("batch");
    }
    LocalObject rootObject;
    if (parentPid == null) {
        rootObject = getRootObject(batch);
    } else {
        throw new UnsupportedOperationException();
    }
    RelationEditor relationEditor = new RelationEditor(rootObject);
    List<String> members = relationEditor.getMembers();
    if (members.contains(childPid)) {
        return false;
    }
    members.add(childPid);
    relationEditor.setMembers(members);
    relationEditor.write(relationEditor.getLastModified(), null);
    rootObject.flush();
    return true;
}

15 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Read and submits scheduled processes from last session.
 * This should be run when application starts.
 */
public static void resumeAll(ImportBatchManager ibm, ImportDispatcher dispatcher, AppConfiguration config) {
    Profiles profiles = config.getProfiles();
    List<Batch> batches2schedule = ibm.findLoadingBatches();
    for (Batch batch : batches2schedule) {
        try {
            ConfigurationProfile profile = resolveProfile(batch, profiles);
            ImportProfile importCfg = config.getImportConfiguration(profile);
            ImportProcess resume = ImportProcess.resume(batch, ibm, importCfg);
            dispatcher.addImport(resume);
        } catch (Exception ex) {
            logBatchFailure(ibm, batch, ex);
        }
    }
}

15 View Complete Implementation : TiffImporterTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testMissingRequiredContent() throws Exception {
    replacedertTrue(alto1.delete());
    replacedertTrue(config.getImportConfiguration().getRequiredDatastreamId().contains(AltoDatastream.ALTO_ID));
    File targetFolder = ImportProcess.createTargetFolder(temp.getRoot());
    replacedertTrue(targetFolder.exists());
    String mimetype = ImportProcess.findMimeType(tiff1);
    replacedertNotNull(mimetype);
    ImportOptions ctx = new ImportOptions(tiff1.getParentFile(), "scanner:scanner1", true, junit, config.getImportConfiguration());
    ctx.setTargetFolder(targetFolder);
    Batch batch = new Batch();
    batch.setId(1);
    batch.setFolder(ibm.relativizeBatchFile(tiff1.getParentFile()));
    ctx.setBatch(batch);
    FileSet fileSet = ImportFileScanner.getFileSets(Arrays.asList(tiff1, ocr1, ac1, uc1)).get(0);
    ctx.setJhoveContext(jhoveContext);
    TiffImporter instance = new TiffImporter(ibm);
    BatchItemObject result = instance.consume(fileSet, ctx);
    replacedertEquals(ObjectState.LOADING_FAILED, result.getState());
    String log = result.getLog();
    replacedertNotNull(log);
    replacedertTrue(log, log.contains("Missing ALTO"));
}

15 View Complete Implementation : ImportResource.java
Copyright GNU General Public License v3.0
Author : proarc
@GET
@Path(ImportResourceApi.BATCH_PATH + '/' + ImportResourceApi.BATCHITEM_PATH)
@Produces(MediaType.APPLICATION_JSON)
public SmartGwtResponse<PageView.Item> listBatchItems(@QueryParam(ImportResourceApi.BATCHITEM_BATCHID) Integer batchId, @QueryParam(ImportResourceApi.BATCHITEM_PID) String pid, @QueryParam("_startRow") int startRow) throws DigitalObjectException {
    startRow = Math.max(0, startRow);
    List<BatchItemObject> imports = null;
    final boolean listLoadedItems = pid == null || pid.isEmpty();
    Batch batch = null;
    if (batchId != null) {
        batch = importManager.get(batchId);
        if (batch.getState() == Batch.State.LOADING_FAILED) {
            Locale locale = session.getLocale(httpHeaders);
            throw RestException.plainText(Status.FORBIDDEN, ServerMessages.get(locale).ImportResource_BatchLoadingFailed_Msg());
        }
        imports = listLoadedItems ? importManager.findLoadedObjects(batch) : importManager.findBatchObjects(batchId, pid);
    }
    if (imports == null) {
        throw RestException.plainText(Status.NOT_FOUND, String.format("Not found! batchId: %s, pid: %s", batchId, pid));
    }
    int totalImports = imports.size();
    if (listLoadedItems && batch.getState() == Batch.State.LOADING && totalImports > 0 && totalImports >= batch.getEstimateItemNumber()) {
        // #fix a situation when all items are already loaded but the batch has not been closed yet.
        --totalImports;
        imports.subList(0, totalImports);
    }
    int totalRows = (batch.getState() == Batch.State.LOADING) ? batch.getEstimateItemNumber() : totalImports;
    if (totalImports == 0 || startRow >= totalImports) {
        return new SmartGwtResponse<Item>(SmartGwtResponse.STATUS_SUCCESS, startRow, startRow, totalRows, null);
    }
    int endRow = totalImports;
    if (startRow > 0) {
        imports = imports.subList(startRow, totalImports);
    }
    List<Item> records = new PageView().list(batchId, imports, session.getLocale(httpHeaders));
    return new SmartGwtResponse<Item>(SmartGwtResponse.STATUS_SUCCESS, startRow, endRow, totalRows, records);
}

15 View Complete Implementation : ImportResource.java
Copyright GNU General Public License v3.0
Author : proarc
@POST
@Path(ImportResourceApi.BATCH_PATH)
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public SmartGwtResponse<BatchView> newBatch(@FormParam(ImportResourceApi.IMPORT_BATCH_FOLDER) @DefaultValue("") String path, @FormParam(ImportResourceApi.NEWBATCH_DEVICE_PARAM) String device, @FormParam(ImportResourceApi.NEWBATCH_INDICES_PARAM) @DefaultValue("true") boolean indices, @FormParam(ImportResourceApi.IMPORT_BATCH_PROFILE) String profileId) throws URISyntaxException, IOException {
    LOG.log(Level.FINE, "import path: {0}, indices: {1}, device: {2}", new Object[] { path, indices, device });
    String folderPath = validateParentPath(path);
    URI userRoot = user.getImportFolder();
    URI folderUri = (folderPath != null) ? // URI multi param constructor escapes input unlike single param constructor or URI.create!
    userRoot.resolve(new URI(null, null, folderPath, null)) : userRoot;
    File folder = new File(folderUri);
    ConfigurationProfile profile = findImportProfile(null, profileId);
    ImportProcess process = ImportProcess.prepare(folder, folderPath, user, importManager, device, indices, appConfig.getImportConfiguration(profile));
    ImportDispatcher.getDefault().addImport(process);
    Batch batch = process.getBatch();
    return new SmartGwtResponse<BatchView>(importManager.viewBatch(batch.getId()));
}

14 View Complete Implementation : SoundRecordingImport.java
Copyright GNU General Public License v3.0
Author : proarc
@Override
public void start(ImportProcess.ImportOptions importConfig, ImportBatchManager batchManager) throws Exception {
    File importFolder = importConfig.getImportFolder();
    Batch batch = importConfig.getBatch();
    ImportFileScanner scanner = new ImportFileScanner();
    List<File> files = scanner.findDigitalContent(importFolder);
    List<FileSet> fileSets = ImportFileScanner.getFileSets(files);
    importConfig.setJhoveContext(JhoveUtility.createContext());
    try {
        consumeFileSets(batch, fileSets, importConfig);
    } finally {
        importConfig.getJhoveContext().destroy();
    }
}

14 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
public Batch add(File folder, String replacedle, UserProfile user, int itemNumber, ImportOptions options) {
    Batch batch = new Batch();
    batch.setCreate(new Timestamp(System.currentTimeMillis()));
    batch.setDevice(options.getDevice());
    batch.setEstimateItemNumber(itemNumber);
    String folderPath = relativizeBatchFile(folder);
    batch.setFolder(folderPath);
    batch.setGenerateIndices(options.isGenerateIndices());
    batch.setState(Batch.State.LOADING);
    batch.setreplacedle(replacedle);
    batch.setUserId(user.getId());
    batch.setProfileId(options.getConfig().getProfileId());
    Batch updated = update(batch);
    updateFolderStatus(updated);
    return updated;
}

14 View Complete Implementation : ImportBatchManager.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Finds objects of given batch prepared for ingest.
 * @param batch batch to find
 * @return objects sorted according to RELS-EXT.
 */
public List<BatchItemObject> findLoadedObjects(Batch batch) {
    List<BatchItemObject> items = findBatchObjects(batch.getId(), null, ObjectState.LOADED);
    if (batch.getState() == State.LOADING) {
        // issue 245: scheduled or loading batches do not have created or complete
        // the root object! Timestamp order should be sufficient here.
        return items;
    }
    LocalObject root = getRootObject(batch);
    RelationEditor relationEditor = new RelationEditor(root);
    List<String> members;
    try {
        members = relationEditor.getMembers();
    } catch (DigitalObjectException ex) {
        throw new IllegalStateException(batch.toString(), ex);
    }
    ArrayList<BatchItemObject> result = new ArrayList<BatchItemObject>(items.size());
    for (String member : members) {
        if (items.isEmpty()) {
            throw new IllegalStateException(String.format("Unknown %s in %s", member, batch));
        }
        for (int i = 0; i < items.size(); i++) {
            BatchItemObject item = items.get(i);
            if (member.equals(item.getPid())) {
                result.add(item);
                items.remove(i);
                break;
            }
        }
    }
    return result;
}

14 View Complete Implementation : ImportProcess.java
Copyright GNU General Public License v3.0
Author : proarc
/**
 * Resumes a scheduled import process.
 * @see #prepare
 * @see ImportDispatcher
 */
public static ImportProcess resume(Batch batch, ImportBatchManager ibm, ImportProfile profile) {
    UserManager users = UserUtil.getDefaultManger();
    UserProfile user = users.find(batch.getUserId());
    File importFolder = ibm.resolveBatchFile(batch.getFolder());
    ImportOptions options = ImportOptions.fromBatch(batch, importFolder, user, profile);
    // if necessary reset old computed batch items
    ImportProcess process = new ImportProcess(options, ibm);
    process.removeCaches(options.getImportFolder());
    process.removeBatchItems(batch);
    return process;
}

14 View Complete Implementation : FedoraImportTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testImporreplacedemRepairNotLinked() throws Exception {
    File batchFolder = temp.newFolder("batch");
    // prepare foxml 1
    LocalObject lobj = localStorage.create(new File(batchFolder, "item1.foxml"));
    lobj.setOwner(fedoraSupport.getTestUser());
    lobj.setLabel("item1");
    RelationEditor locRels = new RelationEditor(lobj);
    locRels.setModel("model:page");
    locRels.write(locRels.getLastModified(), "test");
    lobj.flush();
    // ingested but not linked by parent; caused by a blackout
    remoteStorage.ingest(lobj, fedoraSupport.getTestUser(), "junit");
    // prepare remote parent
    RemoteObject parent = createParent(testName.getMethodName() + "_parent");
    ReplacementDataSet db = database(dbsupport.loadFlatXmlDataStream(EmpireBatchDaoTest.clreplaced, "user.xml"), dbsupport.loadFlatXmlDataStream(getClreplaced(), "batch.xml"));
    db.addReplacementObject("{$parent_pid}", parent.getPid());
    SqlTransaction tx = daos.createTransaction();
    dbsupport.cleanInsert(dbsupport.getConnection(tx), db);
    tx.commit();
    // add item 1
    Batch batch = ibm.get(1);
    replacedertNotNull(batch);
    BatchItemObject item1 = ibm.addLocalObject(batch, lobj);
    item1.setState(ObjectState.INGESTED);
    ibm.update(item1);
    // import
    BatchItemObject result = fedoraImport.imporreplacedem(item1, fedoraSupport.getTestUser(), true);
    replacedertNotNull(result);
    replacedertEquals(ObjectState.INGESTED, result.getState());
    result = ibm.findBatchObject(batch.getId(), item1.getPid());
    replacedertEquals(ObjectState.INGESTED, result.getState());
    List<Item> fItems = search.find(lobj.getPid());
    replacedertEquals(1, fItems.size());
    FedoraTestSupport.replacederreplacedem(fItems, lobj.getPid());
}

14 View Complete Implementation : FedoraImportTest.java
Copyright GNU General Public License v3.0
Author : proarc
@Test
public void testImporreplacedemRepairLinked() throws Exception {
    File batchFolder = temp.newFolder("batch");
    // prepare foxml 1
    LocalObject lobj = localStorage.create(new File(batchFolder, "item1.foxml"));
    lobj.setOwner(fedoraSupport.getTestUser());
    lobj.setLabel("item1");
    RelationEditor locRels = new RelationEditor(lobj);
    locRels.setModel("model:page");
    locRels.write(locRels.getLastModified(), "test");
    lobj.flush();
    // ingested and linked by parent; caused by a following blackout
    remoteStorage.ingest(lobj, fedoraSupport.getTestUser(), "junit");
    // prepare remote parent
    RemoteObject parent = createParent(testName.getMethodName() + "_parent", lobj.getPid());
    ReplacementDataSet db = database(dbsupport.loadFlatXmlDataStream(EmpireBatchDaoTest.clreplaced, "user.xml"), dbsupport.loadFlatXmlDataStream(getClreplaced(), "batch.xml"));
    db.addReplacementObject("{$parent_pid}", parent.getPid());
    SqlTransaction tx = daos.createTransaction();
    dbsupport.cleanInsert(dbsupport.getConnection(tx), db);
    tx.commit();
    // add item 1
    Batch batch = ibm.get(1);
    replacedertNotNull(batch);
    BatchItemObject item1 = ibm.addLocalObject(batch, lobj);
    item1.setState(ObjectState.INGESTED);
    ibm.update(item1);
    // import
    BatchItemObject result = fedoraImport.imporreplacedem(item1, fedoraSupport.getTestUser(), true);
    // test skipped by repair process
    replacedertNull(result);
    result = ibm.findBatchObject(batch.getId(), item1.getPid());
    replacedertEquals(ObjectState.INGESTED, result.getState());
    List<Item> fItems = search.find(lobj.getPid());
    replacedertEquals(1, fItems.size());
    FedoraTestSupport.replacederreplacedem(fItems, lobj.getPid());
}

13 View Complete Implementation : SoundRecordingImport.java
Copyright GNU General Public License v3.0
Author : proarc
private void consumeFileSets(Batch batch, List<FileSet> fileSets, ImportProcess.ImportOptions ctx) throws InterruptedException {
    ImportBatchManager batchManager = ImportBatchManager.getInstance();
    long start = System.currentTimeMillis();
    for (FileSet fileSet : fileSets) {
        if (Thread.interrupted()) {
            throw new InterruptedException();
        }
        ImportBatchManager.BatchItemObject item = consumeFileSet(fileSet, ctx);
        String pid = item == null ? null : item.getPid();
        BatchItem.FileState state = item == null ? BatchItem.FileState.SKIPPED : BatchItem.FileState.OK;
        batchManager.addFileItem(batch.getId(), pid, state, fileSet.getFiles());
        if (item != null) {
            if (BatchItem.ObjectState.LOADING_FAILED == item.getState()) {
                batch.setState(Batch.State.LOADING_FAILED);
                batch.setLog(item.getFile() + "\n" + item.getLog());
                return;
            }
        }
    }
    LOG.log(Level.FINE, "Total time: {0} ms", System.currentTimeMillis() - start);
}