package com.constellio.app.ui.acceptation.search;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDate;
import com.constellio.model.entities.EnumWithSmallCode;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder;
import com.constellio.sdk.tests.TestRecord;
import com.constellio.sdk.tests.schemas.SchemasSetup;
import com.constellio.sdk.tests.setups.SchemaShortcuts;
public class SimpleSearchViewAcceptTestSetup extends SchemasSetup {
public final static int DEFAULT_NUM_RECORDS = 100;
public static final String DOCUMENT = "fakeDocument";
public static enum ZEnum implements EnumWithSmallCode {
ALPHA("A"), BETA("B"), GAMMA("C");
private String code;
private ZEnum(String code) {
this.code = code;
}
@Override
public String getCode() {
return code;
}
}
public SimpleSearchViewAcceptTestSetup(String collection) {
super(collection);
}
@Override
public void setUp() {
MetadataSchemaTypeBuilder builder = typesBuilder.createNewSchemaType(DOCUMENT);
builder.getDefaultSchema().create("bodyText").addLabel(Language.French, "Body text").setType(MetadataValueType.TEXT)
.setSearchable(true);
builder.getDefaultSchema().create("number").addLabel(Language.French, "Number").setType(MetadataValueType.NUMBER)
.setSearchable(true);
builder.getDefaultSchema().create("someFacet").addLabel(Language.French, "Some facet").setType(MetadataValueType.NUMBER);
builder.getDefaultSchema().create("anotherFacet").addLabel(Language.French, "Another facet")
.setType(MetadataValueType.STRING);
builder.getDefaultSchema().create("date").setType(MetadataValueType.DATE);
builder.getDefaultSchema().create("zenum").setType(MetadataValueType.ENUM).defineAsEnum(ZEnum.class);
}
public List<Record> givenRecords(RecordServices recordServices) {
Transaction transaction = new Transaction();
List<Record> records = new ArrayList<>();
for (int i = 0; i < DEFAULT_NUM_RECORDS; i++) {
records.add(createDocument(i));
}
transaction.addUpdate(records);
try {
recordServices.execute(transaction);
} catch (RecordServicesException e) {
throw new RuntimeException(e);
}
return records;
}
public class Document implements SchemaShortcuts {
@Override
public String code() {
return DOCUMENT + "_default";
}
@Override
public String collection() {
return collection;
}
@Override
public MetadataSchema instance() {
return getSchema(code());
}
public Metadata title() {
return getMetadata(code() + "_title");
}
public Metadata text() {
return getMetadata(code() + "_bodyText");
}
public Metadata number() {
return getMetadata(code() + "_number");
}
public Metadata someFacet() {
return getMetadata(code() + "_someFacet");
}
public Metadata anotherFacet() {
return getMetadata(code() + "_anotherFacet");
}
public Metadata date() {
return getMetadata(code() + "_date");
}
public Metadata zenum() {
return getMetadata(code() + "_zenum");
}
}
private Record createDocument(int id) {
Document document = new Document();
Record record = new TestRecord(document, "DOC" + id);
record.set(document.title(), "Document " + id);
record.set(document.text(), "This is some amazing text for document number " + id);
record.set(document.number(), (double) id);
record.set(document.someFacet(), (double) (id % 10));
record.set(document.anotherFacet(), String.valueOf(id % 10));
record.set(document.date(), new LocalDate());
record.set(document.zenum(), ZEnum.ALPHA);
return record;
}
}