package org.aplikator.server.data; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Locale; import java.util.Scanner; import java.util.UUID; import org.aplikator.client.shared.data.Operation; import org.aplikator.client.shared.data.PrimaryKey; import org.aplikator.server.DescriptorRegistry; import org.aplikator.server.descriptor.Collection; import org.aplikator.server.descriptor.Entity; import org.aplikator.server.descriptor.View; import org.aplikator.server.persistence.Transaction; public class Context { private final HttpServletRequest httpServletRequest; private final HttpServletResponse httpServletResponse; private final AplikatorServiceBackend aplikatorServiceBackend; private RecordContainer recordContainer; private Transaction transaction; public Context(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AplikatorServiceBackend aplikatorServiceBackend, RecordContainer rc) { super(); this.httpServletRequest = httpServletRequest; this.httpServletResponse = httpServletResponse; this.aplikatorServiceBackend = aplikatorServiceBackend; transaction = aplikatorServiceBackend.persister.beginTransaction(); this.recordContainer = rc; //System.out.println("CONTEXT:"+httpServletRequest + " LENGTH:"+httpServletRequest.getContentLength()); //System.out.println("BODY:"+extractPostRequestBody(httpServletRequest)); } static String extractPostRequestBody(HttpServletRequest request) { if ("POST".equalsIgnoreCase(request.getMethod())) { Scanner s = null; try { s = new Scanner(request.getInputStream(), "UTF-8").useDelimiter("\\A"); } catch (IOException e) { e.printStackTrace(); } return s.hasNext() ? s.next() : ""; } return ""; } public HttpServletRequest getHttpServletRequest() { return this.httpServletRequest; } public HttpServletResponse getHttpServletResponse() { return this.httpServletResponse; } public Locale getUserLocale() { return this.httpServletRequest.getLocale(); } AplikatorServiceBackend getAplikatorServiceBackend() { return aplikatorServiceBackend; } public RecordContainer getRecordContainer() { if (recordContainer == null) { recordContainer = new RecordContainer(); } return recordContainer; } public void clearRecordContainer() { getRecordContainer().clear(); } public void addNewRecordToContainer(Record record) { View view = ((Entity) DescriptorRegistry.get().getDescriptionItem(record.getPrimaryKey().getEntityId())).view(); getRecordContainer().addRecord(view, null, record, Operation.CREATE); } public void addUpdatedRecordToContainer(Record originalRecord, Record updatedRecord) { View view = ((Entity) DescriptorRegistry.get().getDescriptionItem(originalRecord.getPrimaryKey().getEntityId())).view(); getRecordContainer().addRecord(view, originalRecord, updatedRecord, Operation.UPDATE); } public void addDeletedRecordToContainer(Record record) { Entity entity = (Entity) DescriptorRegistry.get().getDescriptionItem(record.getPrimaryKey().getEntityId()); /* for (Property<? extends Serializable> property : entity.getProperties()) { if (property instanceof Collection){ List<Record> nestedRecords = record.getCollectionRecords((Collection) property, this); for (Record nestedRecord : nestedRecords) { this.addDeletedRecordToContainer(nestedRecord); } } }*/ View view = entity.view(); getRecordContainer().addRecord(view, record, null, Operation.DELETE); } public void prepareDuplicateCollection(ContainerNode node, Collection collection, View collectionView) { for (Record record : node.getOriginal().getCollectionRecords(collection, collectionView, this)) { Record duplicatedRecord = record.clone(); duplicatedRecord.setPrimaryKey(new PrimaryKey(record.getPrimaryKey().getEntityId(), UUID.randomUUID().toString())); duplicatedRecord.setOwnerPrimaryKey(node.getEdited().getPrimaryKey()); duplicatedRecord.setOwnerProperty(collection); this.getRecordContainer().addRecord(node.getView(), null, duplicatedRecord, Operation.PREPARE); } } public void processRecordContainer() { recordContainer = getAplikatorServiceBackend().processRecords(getRecordContainer(), this); } public RecordContainer processRecordContainer(RecordContainer rc) { return getAplikatorServiceBackend().processRecords(rc, this); } public QueryBuilder getRecords(View view) { return new QueryBuilder(this, view); } public QueryBuilder getRecords(Entity entity) { return new QueryBuilder(this, entity.view()); } public Record getRecord(PrimaryKey primaryKey, View view) { return getAplikatorServiceBackend().getRecord(primaryKey, view, this); } public Transaction getTransaction() { return transaction; } public void closeTransaction() { aplikatorServiceBackend.persister.close(transaction); } public boolean isUserInRole(String role) { //System.out.println("USER:" + getHttpServletRequest().getRemoteUser() + " ROLE:" + role + "-" + getHttpServletRequest().isUserInRole(role) + "(" + getHttpServletRequest() + ")"); //System.out.println("USERPRINCIPALCLASS:" +getHttpServletRequest().getUserPrincipal().getClass()); return getHttpServletRequest().isUserInRole(role); } public boolean isAuthenticated() { return getHttpServletRequest().getRemoteUser() != null; } }