Skip to content

Commit

Permalink
#1107 Implemented web ui resources for master info provider that retu…
Browse files Browse the repository at this point in the history
…rns the master configuration. Also implemented tg-ui-action logic that retrieves the master's info and sets the appropriate properties of action
  • Loading branch information
oleh-maikovych committed Apr 24, 2020
1 parent d8a142c commit 2dd7f03
Show file tree
Hide file tree
Showing 12 changed files with 426 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import ua.com.fielden.platform.entity.functional.master.AcknowledgeWarnings;
import ua.com.fielden.platform.entity.functional.master.PropertyWarning;
import ua.com.fielden.platform.keygen.KeyNumber;
import ua.com.fielden.platform.master.MasterInfo;
import ua.com.fielden.platform.menu.CustomView;
import ua.com.fielden.platform.menu.EntityCentreView;
import ua.com.fielden.platform.menu.EntityMasterView;
Expand Down Expand Up @@ -119,6 +120,7 @@ public class PlatformDomainTypes {
types.add(SecurityMatrixSaveAction.class);
types.add(EntityNavigationAction.class);
types.add(AttachmentPreviewEntityAction.class);
types.add(MasterInfo.class);

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package ua.com.fielden.platform.master;

import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.entity.annotation.DescTitle;
import ua.com.fielden.platform.entity.annotation.IsProperty;
import ua.com.fielden.platform.entity.annotation.KeyTitle;
import ua.com.fielden.platform.entity.annotation.KeyType;
import ua.com.fielden.platform.entity.annotation.Observable;
import ua.com.fielden.platform.entity.annotation.Title;

@KeyType(String.class)
@KeyTitle("Element Name")
@DescTitle("Element URI")
public class MasterInfo extends AbstractEntity<String> {

@IsProperty
@Title("Width")
private String width;

@IsProperty
@Title("Hegiht")
private String height;

@IsProperty
@Title("Width Unit")
private String widthUnit;

@IsProperty
@Title(value = "Height Unit", desc = "Desc")
private String heightUnit;

@IsProperty
@Title("Refresh parent centre after save?")
private boolean shouldRefreshParentCentreAfterSave = false;

@IsProperty
@Title("Require Selection Criteria")
private String requireSelectionCriteria;

@IsProperty
@Title("Require Selected Entities")
private String requireSelectedEntities;

@IsProperty
@Title("Require Master Entity")
private String requireMasterEntity;

@IsProperty
@Title(value = "Entity Type", desc = "Desc")
private String entityType;

@IsProperty
@Title(value = "Entity Id", desc = "Desc")
private Long entityId;

@Observable
public MasterInfo setEntityId(final Long entityId) {
this.entityId = entityId;
return this;
}

public Long getEntityId() {
return entityId;
}

@Observable
public MasterInfo setEntityType(final String entityType) {
this.entityType = entityType;
return this;
}

public String getEntityType() {
return entityType;
}

@Observable
public MasterInfo setRequireMasterEntity(final String requireMasterEntity) {
this.requireMasterEntity = requireMasterEntity;
return this;
}

public String getRequireMasterEntity() {
return requireMasterEntity;
}

@Observable
public MasterInfo setRequireSelectedEntities(final String requireSelectedEntities) {
this.requireSelectedEntities = requireSelectedEntities;
return this;
}

public String getRequireSelectedEntities() {
return requireSelectedEntities;
}

@Observable
public MasterInfo setRequireSelectionCriteria(final String requireSelectionCriteria) {
this.requireSelectionCriteria = requireSelectionCriteria;
return this;
}

public String getRequireSelectionCriteria() {
return requireSelectionCriteria;
}

@Observable
public MasterInfo setShouldRefreshParentCentreAfterSave(final boolean shouldRefreshParentCentreAfterSave) {
this.shouldRefreshParentCentreAfterSave = shouldRefreshParentCentreAfterSave;
return this;
}

public boolean getShouldRefreshParentCentreAfterSave() {
return shouldRefreshParentCentreAfterSave;
}

@Observable
public MasterInfo setHeightUnit(final String heightUnit) {
this.heightUnit = heightUnit;
return this;
}

public String getHeightUnit() {
return heightUnit;
}

@Observable
public MasterInfo setWidthUnit(final String widthUnit) {
this.widthUnit = widthUnit;
return this;
}

public String getWidthUnit() {
return widthUnit;
}

@Observable
public MasterInfo setHeight(final String height) {
this.height = height;
return this;
}

public String getHeight() {
return height;
}

@Observable
public MasterInfo setWidth(final String width) {
this.width = width;
return this;
}

public String getWidth() {
return width;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import ua.com.fielden.platform.web.factories.webui.FileResourceFactory;
import ua.com.fielden.platform.web.factories.webui.MainWebUiComponentResourceFactory;
import ua.com.fielden.platform.web.factories.webui.MasterComponentResourceFactory;
import ua.com.fielden.platform.web.factories.webui.MasterInfoProviderResourceFactory;
import ua.com.fielden.platform.web.factories.webui.MasterTestsComponentResourceFactory;
import ua.com.fielden.platform.web.factories.webui.SerialisationTestResourceFactory;
import ua.com.fielden.platform.web.factories.webui.ServiceWorkerResourceFactory;
Expand Down Expand Up @@ -133,6 +134,9 @@ public final Restlet createInboundRoot() {
// For egi example TODO remove later.
router.attach("/test/egi", new EgiExampleResourceFactory(injector));

//Attache master retrieve resources
router.attach("/master/{entityType}/{entityId}", new MasterInfoProviderResourceFactory(webApp, deviceProvider, dates, restUtil));

// Registering entity centres:
attachCentreResources(router, webApp, restUtil);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package ua.com.fielden.platform.web.factories.webui;

import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
import org.restlet.data.Method;

import ua.com.fielden.platform.utils.IDates;
import ua.com.fielden.platform.web.app.IWebUiConfig;
import ua.com.fielden.platform.web.interfaces.IDeviceProvider;
import ua.com.fielden.platform.web.resources.RestServerUtil;
import ua.com.fielden.platform.web.resources.webui.MasterInfoProviderResource;
import ua.com.fielden.platform.web.view.master.MasterInfoProvider;

public class MasterInfoProviderResourceFactory extends Restlet {

private final MasterInfoProvider masterInfoProvider;
private final IDeviceProvider deviceProvider;
private final IDates dates;
private final RestServerUtil restUtil;

public MasterInfoProviderResourceFactory(final IWebUiConfig webApp, final IDeviceProvider deviceProvider, final IDates dates, final RestServerUtil restUtil) {
this.masterInfoProvider = new MasterInfoProvider(webApp);
this.deviceProvider = deviceProvider;
this.dates = dates;
this.restUtil = restUtil;
}

/**
* Invokes on GET request from client.
*/
@Override
public void handle(final Request request, final Response response) {
super.handle(request, response);

if (Method.GET.equals(request.getMethod())) {
new MasterInfoProviderResource(
masterInfoProvider,
restUtil,
deviceProvider,
dates,
getContext(),
request,
response //
).handle();
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package ua.com.fielden.platform.web.resources.webui;

import static ua.com.fielden.platform.web.utils.WebUiResourceUtils.handleUndesiredExceptions;

import org.restlet.Context;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;

import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.utils.IDates;
import ua.com.fielden.platform.web.interfaces.IDeviceProvider;
import ua.com.fielden.platform.web.resources.RestServerUtil;
import ua.com.fielden.platform.web.resources.webui.exceptions.MissingEntityType;
import ua.com.fielden.platform.web.view.master.MasterInfoProvider;

public class MasterInfoProviderResource extends AbstractWebResource {

private final MasterInfoProvider masterInfoProvider;
private final RestServerUtil restUtil;

public MasterInfoProviderResource(final MasterInfoProvider masterInfoProvider, final RestServerUtil restUtil, final IDeviceProvider deviceProvider, final IDates dates, final Context context, final Request request, final Response response) {
super(context, request, response, deviceProvider, dates);
this.masterInfoProvider = masterInfoProvider;
this.restUtil = restUtil;
}

@Get
@Override
public Representation get() {
return handleUndesiredExceptions(getResponse(), () -> restUtil.singleJsonRepresentation(masterInfoProvider.getMasterInfo(getEntityType(), getEntityId())), restUtil);
}

private Long getEntityId() {
return Long.valueOf(getRequest().getAttributes().get("entityId").toString());
}

@SuppressWarnings("unchecked")
private Class<? extends AbstractEntity<?>> getEntityType() {
final String entityType = getRequest().getAttributes().get("entityType").toString();
try {
return (Class<? extends AbstractEntity<?>>) Class.forName(entityType);
} catch (final ClassNotFoundException e) {
throw new MissingEntityType(String.format("The entity type class is missing for type: %s", entityType), e);
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ua.com.fielden.platform.web.resources.webui.exceptions;

public class MissingEntityType extends RuntimeException {
private static final long serialVersionUID = 1L;

public MissingEntityType(final String msg) {
super(msg);
}

public MissingEntityType(final String msg, final Throwable cause) {
super(msg, cause);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import static ua.com.fielden.platform.web.action.pre.ConfirmationPreAction.okCancel;
import static ua.com.fielden.platform.web.action.pre.ConfirmationPreAction.yesNo;
import static ua.com.fielden.platform.web.centre.api.actions.impl.EntityActionBuilder.action;
import static ua.com.fielden.platform.web.centre.api.actions.impl.EntityActionBuilder.editAction;
import static ua.com.fielden.platform.web.centre.api.context.impl.EntityCentreContextSelector.context;
import static ua.com.fielden.platform.web.centre.api.crit.defaults.mnemonics.construction.options.DefaultValueOptions.multi;
import static ua.com.fielden.platform.web.centre.api.crit.defaults.mnemonics.construction.options.DefaultValueOptions.single;
Expand Down Expand Up @@ -1836,13 +1837,20 @@ public JsCode build() {
// .also()
// .addProp(mkProp("Custom Prop 2", "Custom property 2 with concrete value", "OK2"))

.addPrimaryAction(action(EntityEditAction.class).withContext(context().withCurrentEntity().withSelectionCrit().build())
.icon("editor:mode-edit")
.withStyle("color: green")
.shortDesc("Edit entity")
.longDesc("Opens master for editing this entity")
.withNoParentCentreRefresh()
.build())
.addPrimaryAction(editAction().withContext(context().withCurrentEntity().withSelectionCrit().build())
.icon("editor:mode-edit")
.withStyle("color: green")
.shortDesc("Edit entity")
.longDesc("Opens master for editing this entity")
.withNoParentCentreRefresh()
.build())
// .addPrimaryAction(action(EntityEditAction.class).withContext(context().withCurrentEntity().withSelectionCrit().build())
// .icon("editor:mode-edit")
// .withStyle("color: green")
// .shortDesc("Edit entity")
// .longDesc("Opens master for editing this entity")
// .withNoParentCentreRefresh()
// .build())
// .addPrimaryAction(
// EntityActionConfig.createMasterInvocationActionConfig()
//EntityActionConfig.createMasterInDialogInvocationActionConfig()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,7 @@ private EntityActionConfig(
final InsertionPoints whereToInsertView,
final UI_ROLE role) {

if (!noAction && functionalEntity == null) {
throw new IllegalArgumentException("A functional entity type should be provided.");
}

if (functionalEntity != null && context == null) {
if (!noAction && context == null) {
throw new IllegalArgumentException("Any functional entity requires some execution context to be specified.");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import org.apache.commons.lang.StringUtils;

import com.google.inject.Injector;

import ua.com.fielden.platform.entity.AbstractEntity;
import ua.com.fielden.platform.entity.AbstractFunctionalEntityWithCentreContext;
import ua.com.fielden.platform.web.PrefDim;
Expand All @@ -28,8 +30,6 @@
import ua.com.fielden.platform.web.view.master.api.actions.pre.IPreAction;
import ua.com.fielden.platform.web.view.master.api.compound.Compound;

import com.google.inject.Injector;

public class EntityActionBuilder<T extends AbstractEntity<?>> implements IEntityActionBuilder<T>, IEntityActionBuilder0<T>, IEntityActionBuilder0WithViews<T>, IEntityActionBuilder1<T>, IEntityActionBuilder2<T>, IEntityActionBuilder3<T>, IEntityActionBuilder4<T>, IEntityActionBuilder4IconStyle<T>, IEntityActionBuilder5<T>, IEntityActionBuilder6<T>, IEntityActionBuilder7<T> {
private Injector injector;
private IWebUiBuilder builder;
Expand Down Expand Up @@ -70,6 +70,15 @@ public static <T extends AbstractEntity<?>> IEntityActionBuilder0WithViews<T> ac
return actionBuilder.addAction(functionalEntity);
}

/**
* Starting point to entity edit action configuration.
*
* @return
*/
public static <T extends AbstractEntity<?>> IEntityActionBuilder0<T> editAction() {
return new EntityActionBuilder<T>();
}

/**
* Constructs entity action configuration that indicates the need to remove the default action if any.
*
Expand Down
Loading

0 comments on commit 2dd7f03

Please sign in to comment.