package com.constellio.model.services.records; import static com.constellio.model.services.records.RecordUtils.changeSchemaTypeAccordingToTypeLinkedSchema; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.List; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.Collection; import com.constellio.model.entities.records.wrappers.EmailToSend; import com.constellio.model.entities.records.wrappers.Event; import com.constellio.model.entities.records.wrappers.Facet; import com.constellio.model.entities.records.wrappers.Group; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.records.wrappers.structure.FacetType; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.entities.security.global.GlobalGroup; import com.constellio.model.entities.security.global.SolrGlobalGroup; import com.constellio.model.entities.security.global.SolrUserCredential; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.schemas.SchemaUtils; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; import com.constellio.model.services.security.roles.Roles; public class SchemasRecordsServices extends GeneratedSchemasRecordsServices { public SchemasRecordsServices(String collection, ModelLayerFactory modelLayerFactory) { super(collection, modelLayerFactory); } public MetadataSchemaType collectionSchemaType() { return getTypes().getSchemaType(Collection.SCHEMA_TYPE); } // // User Credentials public MetadataSchemaType credentialSchemaType() { return getTypes().getSchemaType(SolrUserCredential.SCHEMA_TYPE); } public MetadataSchema credentialSchema() { return getTypes().getSchema(SolrUserCredential.DEFAULT_SCHEMA); } public Metadata credentialUsername() { return credentialSchema().getMetadata(SolrUserCredential.USERNAME); } public Metadata credentialStatus() { return credentialSchema().getMetadata(SolrUserCredential.STATUS); } public Metadata credentialCollections() { return credentialSchema().getMetadata(SolrUserCredential.COLLECTIONS); } public Metadata credentialTokenKeys() { return credentialSchema().getMetadata(SolrUserCredential.TOKEN_KEYS); } public Metadata credentialTokenExpirations() { return credentialSchema().getMetadata(SolrUserCredential.TOKEN_EXPIRATIONS); } public Metadata credentialGroups() { return credentialSchema().getMetadata(SolrUserCredential.GLOBAL_GROUPS); } public Metadata credentialServiceKey() { return credentialSchema().getMetadata(SolrUserCredential.SERVICE_KEY); } public UserCredential newCredential() { return new SolrUserCredential(create(credentialSchema()), getTypes()); } public UserCredential wrapCredential(Record record) { return new SolrUserCredential(record, getTypes()); } public List<UserCredential> wrapCredentials(List<Record> records) { List<UserCredential> result = new ArrayList<>(records.size()); for (Record record : records) { result.add(wrapCredential(record)); } return result; } // Global Groups public MetadataSchemaType globalGroupSchemaType() { return getTypes().getSchemaType(SolrGlobalGroup.SCHEMA_TYPE); } public MetadataSchema globalGroupSchema() { return getTypes().getSchema(SolrGlobalGroup.DEFAULT_SCHEMA); } public Metadata globalGroupCode() { return globalGroupSchema().getMetadata(SolrGlobalGroup.CODE); } public Metadata globalGroupHierarchy() { return globalGroupSchema().getMetadata(SolrGlobalGroup.HIERARCHY); } public Metadata globalGroupStatus() { return globalGroupSchema().getMetadata(SolrGlobalGroup.STATUS); } public Metadata globalGroupCollections() { return globalGroupSchema().getMetadata(SolrGlobalGroup.COLLECTIONS); } public GlobalGroup newGlobalGroup() { return new SolrGlobalGroup(create(globalGroupSchema()), getTypes()); } public GlobalGroup wrapGlobalGroup(Record record) { return new SolrGlobalGroup(record, getTypes()); } public List<GlobalGroup> wrapGlobalGroups(List<Record> records) { List<GlobalGroup> result = new ArrayList<>(records.size()); for (Record record : records) { result.add(wrapGlobalGroup(record)); } return result; } //Events public MetadataSchema eventSchema() { return getTypes().getSchema(Event.DEFAULT_SCHEMA); } public MetadataSchemaType eventSchemaType() { return getTypes().getSchemaType(Event.SCHEMA_TYPE); } public Metadata eventType() { return eventSchema().getMetadata(Event.TYPE); } public Metadata eventUsername() { return eventSchema().getMetadata(Event.USERNAME); } public Metadata eventCreation() { return eventSchema().getMetadata(Schemas.CREATED_ON.getLocalCode()); } public Event wrapEvent(Record record) { return new Event(record, getTypes()); } public List<Event> wrapEvents(List<Record> records) { List<Event> events = new ArrayList<>(); for (Record record : records) { events.add(new Event(record, getTypes())); } return events; } public Event getEvent(String id) { return new Event(get(id), getTypes()); } public Event newEvent() { return new Event(create(defaultSchema(Event.SCHEMA_TYPE)), getTypes()); } public List<Event> searchEvents(LogicalSearchQuery query) { return wrapEvents(modelLayerFactory.newSearchServices().search(query)); } public List<Event> searchEvents(LogicalSearchCondition condition) { MetadataSchemaType type = eventSchemaType(); LogicalSearchQuery query = new LogicalSearchQuery(from(type).whereAllConditions(asList(condition))); return wrapEvents(modelLayerFactory.newSearchServices().search(query)); } //EmailToSend public MetadataSchema emailToSend() { return getTypes().getSchema(EmailToSend.DEFAULT_SCHEMA); } public EmailToSend wrapEmailToSend(Record record) { return new EmailToSend(record, getTypes()); } public EmailToSend newEmailToSend() { return new EmailToSend(create(defaultSchema(EmailToSend.SCHEMA_TYPE)), getTypes()); } //Groups public MetadataSchema groupSchema() { return getTypes().getSchema(Group.DEFAULT_SCHEMA); } public MetadataSchemaType groupSchemaType() { return getTypes().getSchemaType(Group.SCHEMA_TYPE); } public Group wrapGroup(Record record) { return new Group(record, getTypes()); } public List<Group> wrapGroups(List<Record> records) { List<Group> users = new ArrayList<>(); for (Record record : records) { users.add(new Group(record, getTypes())); } return users; } public Group getGroup(String id) { return new Group(get(id), getTypes()); } public Group newGroup() { return new Group(create(groupSchema()), getTypes()); } public Group newGroupWithId(String id) { return new Group(create(groupSchema(), id), getTypes()); } // //Facet public MetadataSchema facetFieldSchema() { return getTypes().getSchema(Facet.FIELD_SCHEMA); } public MetadataSchemaType facetSchemaType() { return getTypes().getSchemaType(Facet.SCHEMA_TYPE); } public MetadataSchema defaultFacet() { return getTypes().getSchema(Facet.DEFAULT_SCHEMA); } public Metadata facetOrder() { return defaultFacet().getMetadata(Facet.ORDER); } public Metadata facetActive() { return defaultFacet().getMetadata(Facet.ACTIVE); } public MetadataSchema facetQuerySchema() { return getTypes().getSchema(Facet.QUERY_SCHEMA); } public Facet newFacetField(String id) { return new Facet(create(facetFieldSchema(), id), getTypes()).setFacetType(FacetType.FIELD); } public Facet newFacetField() { return new Facet(create(facetFieldSchema()), getTypes()).setFacetType(FacetType.FIELD); } public Facet newFacetQuery(String id) { return new Facet(create(facetQuerySchema(), id), getTypes()).setFacetType(FacetType.QUERY); } public Facet newFacetQuery() { return new Facet(create(facetQuerySchema()), getTypes()).setFacetType(FacetType.QUERY); } public Facet newFacetDefault() { return new Facet(create(defaultFacet()), getTypes()).setFacetType(null); } public Facet getFacet(String id) { return new Facet(get(id), getTypes()); } public Facet wrapFacet(Record record) { return record == null ? null : new Facet(record, getTypes()); } public List<Facet> wrapFacets(List<Record> records) { List<Facet> wrappers = new ArrayList<>(); for (Record record : records) { wrappers.add(new Facet(record, getTypes())); } return wrappers; } //Collection public Collection wrapCollection(Record record) { return new Collection(record, getTypes()); } //Users public MetadataSchema userSchema() { return getTypes().getSchema(User.DEFAULT_SCHEMA); } public MetadataSchemaType userSchemaType() { return getTypes().getSchemaType(User.SCHEMA_TYPE); } public Metadata userUsername() { return userSchema().getMetadata(User.USERNAME); } public Metadata userEmail() { return userSchema().getMetadata(User.EMAIL); } public User wrapUser(Record record) { return new User(record, getTypes(), getRoles()); } public UserCredential wrapUserCredential(Record record) { return new SolrUserCredential(record, getTypes()); } public List<User> wrapUsers(List<Record> records) { List<User> users = new ArrayList<>(); for (Record record : records) { users.add(new User(record, getTypes(), getRoles())); } return users; } public List<User> getUsers(List<String> ids) { List<User> users = new ArrayList<>(); for (String id : ids) { users.add(new User(get(id), getTypes(), getRoles())); } return users; } public User getUser(String id) { return new User(get(id), getTypes(), getRoles()); } public User newUser() { return new User(create(userSchema()), getTypes(), getRoles()); } public User newUserWithId(String id) { return new User(create(userSchema(), id), getTypes(), getRoles()); } private Roles getRoles() { return modelLayerFactory.getRolesManager().getCollectionRoles(getCollection()); } }