package com.constellio.app.ui.pages.management.sequence;
import static java.lang.Math.max;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.extensions.AppLayerCollectionExtensions;
import com.constellio.app.extensions.sequence.AvailableSequence;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.factories.ConstellioFactories;
import com.constellio.app.services.records.AvailableSequencesServices;
import com.constellio.app.ui.pages.base.SessionContext;
import com.constellio.data.dao.services.factories.DataLayerFactory;
import com.constellio.data.dao.services.sequence.SequencesManager;
import com.constellio.model.entities.records.Record;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServices;
public class SequenceServices {
private ConstellioFactories constellioFactories;
private SessionContext sessionContext;
public SequenceServices(ConstellioFactories constellioFactories, SessionContext sessionContext) {
this.constellioFactories = constellioFactories;
this.sessionContext = sessionContext;
}
public List<AvailableSequence> getAvailableSequences(String recordId) {
final List<AvailableSequence> availableSequences = new ArrayList<>();
String collection = sessionContext.getCurrentCollection();
ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory();
AppLayerFactory appLayerFactory = constellioFactories.getAppLayerFactory();
RecordServices recordServices = modelLayerFactory.newRecordServices();
Record record;
if (recordId != null) {
record = recordServices.getDocumentById(recordId);
AppLayerCollectionExtensions collectionExtensions = appLayerFactory.getExtensions().forCollection(collection);
List<AvailableSequence> collectionAvailableSequences = new AvailableSequencesServices(appLayerFactory)
.getAvailableSequencesForRecord(record);
availableSequences.addAll(collectionAvailableSequences);
// AppLayerSystemExtensions systemExtensions = appLayerFactory.getExtensions().getSystemWideExtensions();
// List<AvailableSequence> systemAvailableSequences = systemExtensions.getAvailableSequences();
// availableSequences.addAll(systemAvailableSequences);
}
return availableSequences;
}
private SequencesManager sequencesManager() {
ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory();
DataLayerFactory dataLayerFactory = modelLayerFactory.getDataLayerFactory();
return dataLayerFactory.getSequencesManager();
}
public void set(String sequenceId, long value) {
SequencesManager sequencesManager = sequencesManager();
sequencesManager.set(sequenceId, max(0, value - 1));
}
public long getLastSequenceValue(String sequenceId) {
SequencesManager sequencesManager = sequencesManager();
return max(1, 1 + sequencesManager.getLastSequenceValue(sequenceId));
}
}