diff --git a/dotCMS/src/integration-test/java/com/dotcms/contenttype/test/FieldFactoryImplTest.java b/dotCMS/src/integration-test/java/com/dotcms/contenttype/test/FieldFactoryImplTest.java index 40ad8b38904a..cf4a5d5ec5fd 100644 --- a/dotCMS/src/integration-test/java/com/dotcms/contenttype/test/FieldFactoryImplTest.java +++ b/dotCMS/src/integration-test/java/com/dotcms/contenttype/test/FieldFactoryImplTest.java @@ -84,11 +84,12 @@ public void testFieldVariables() throws Exception { for (Field field : fields) { - List vars = FactoryLocator.getFieldFactory().loadVariables(field); + List vars = field.fieldVariables(); for(FieldVariable var : vars){ fieldApi.delete(var); } - vars = fieldApi.loadVariables(field); + + vars = FactoryLocator.getFieldFactory().loadVariables(field); assertThat("No field vars for field " + field, vars.size() ==0); @@ -103,9 +104,9 @@ public void testFieldVariables() throws Exception { .build(); var = fieldApi.save(var, APILocator.systemUser()); - assertThat("field var saved correctly " + var,var.equals(fieldApi.loadVariable(var.id()))); + assertThat("field var saved correctly " + var, var.equals(FactoryLocator.getFieldFactory().loadVariable(var.id()))); - vars = fieldApi.loadVariables(field); + vars = FactoryLocator.getFieldFactory().loadVariables(field); assertThat("field var added for field " + field, vars.size() ==i+1); } @@ -115,7 +116,7 @@ public void testFieldVariables() throws Exception { for(FieldVariable var : vars){ fieldApi.delete(var); - assertThat("field deleted correctly " + var,--mySize == fieldApi.loadVariables(field).size()); + assertThat("field deleted correctly " + var,--mySize == FactoryLocator.getFieldFactory().loadVariables(field).size()); } } } diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPI.java b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPI.java index 8262fd682d12..dc71ea020ad2 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPI.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPI.java @@ -185,24 +185,6 @@ default FieldAPI instance() { */ void delete(FieldVariable fieldVar) throws DotDataException; - /** - * Retrieves the Field Variables related to a specific Field. - * - * @param field Field to search on - * @return List of Field Variables Objects that are related to a Field - * @throws DotDataException Error occurred when performing the action. - */ - List loadVariables(Field field) throws DotDataException; - - /** - * Retrieves a Field Variable given its id - * - * @param id Id of the field Variable. - * @return Field Variable related to the given id. - * @throws DotDataException Error occurred when performing the action. - */ - FieldVariable loadVariable(String id) throws DotDataException; - /** * Returns the dataType and the number of the column of that field. e.g bool1 * Only one Host Field and Tag Field per Content Type is allowed. diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java index d6c5de8aea3a..37a5c55b90e3 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldAPIImpl.java @@ -256,16 +256,6 @@ public void delete(FieldVariable fieldVar) throws DotDataException { fac.delete(fieldVar); } - -@Override -public List loadVariables(Field field) throws DotDataException { - return fac.loadVariables(field); -} - -@Override -public FieldVariable loadVariable(String id) throws DotDataException { - return fac.loadVariable(id); -} diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java index 1de1a604f2f9..a33351e97ae0 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/business/FieldFactoryImpl.java @@ -129,6 +129,16 @@ public void delete(FieldVariable fieldVar) throws DotDataException { return null; }); + Field f = byId(fieldVar.fieldId()); + ContentType t; + try { + t = APILocator.getContentTypeAPI(APILocator.systemUser()).find(f.contentTypeId()); + if (t != null) { + CacheLocator.getContentTypeCache2().remove(t); + } + } catch (DotSecurityException e) { + throw new DotStateException(e); + } } @Override diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/model/field/Field.java b/dotCMS/src/main/java/com/dotcms/contenttype/model/field/Field.java index 5fda4c8a8b1e..af9bcc906036 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/model/field/Field.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/model/field/Field.java @@ -3,7 +3,9 @@ import java.io.Serializable; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.elasticsearch.common.Nullable; import org.immutables.value.Value; @@ -22,6 +24,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonSubTypes.Type; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import com.google.common.collect.ImmutableMap; @JsonTypeInfo( use = Id.CLASS, @@ -186,6 +189,16 @@ public List fieldVariables() { } + @JsonIgnore + @Value.Lazy + public Map fieldVariablesMap() { + Map fmap = new HashMap<>(); + for (FieldVariable fv : this.fieldVariables()) { + fmap.put(fv.id(), fv); + } + return ImmutableMap.copyOf(fmap); + } + private List innerFieldVariables = null; public void constructFieldVariables(List fieldVariables) { diff --git a/dotCMS/src/main/java/com/dotcms/contenttype/util/ContentTypeImportExportUtil.java b/dotCMS/src/main/java/com/dotcms/contenttype/util/ContentTypeImportExportUtil.java index 8fa2492a5e26..e6ceba973774 100644 --- a/dotCMS/src/main/java/com/dotcms/contenttype/util/ContentTypeImportExportUtil.java +++ b/dotCMS/src/main/java/com/dotcms/contenttype/util/ContentTypeImportExportUtil.java @@ -92,9 +92,7 @@ private void streamingJsonExport(File file, int run) throws DotDataException, Do List fieldVariables=new ArrayList(); for(Field ff : fields) { - fieldVariables.addAll( - APILocator.getContentTypeFieldAPI().loadVariables(ff) - ); + fieldVariables.addAll(ff.fieldVariables()); } mapper.writeValue(jg, new ContentTypeWrapper(contentType,fields,fieldVariables)); diff --git a/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldVariableResource.java b/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldVariableResource.java index 9d965c40ac44..535899c6f223 100644 --- a/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldVariableResource.java +++ b/dotCMS/src/main/java/com/dotcms/rest/api/v1/contenttype/FieldVariableResource.java @@ -162,7 +162,7 @@ public final Response getFieldVariablesByFieldId(@PathParam("typeId") final Stri try { Field field = fapi.find(fieldId); - List fieldVariables = fapi.loadVariables(field); + List fieldVariables = field.fieldVariables(); response = Response.ok(new ResponseEntityView(new JsonFieldVariableTransformer(fieldVariables).mapList())).build(); @@ -196,7 +196,7 @@ public final Response getFieldVariablesByFieldVar(@PathParam("typeId") final Str try { Field field = fapi.byContentTypeIdAndVar(typeId, fieldVar); - List fieldVariables = fapi.loadVariables(field); + List fieldVariables = field.fieldVariables(); response = Response.ok(new ResponseEntityView(new JsonFieldVariableTransformer(fieldVariables).mapList())).build(); @@ -230,7 +230,7 @@ public Response getFieldVariableByFieldId(@PathParam("typeId") final String type Field field = fapi.find(fieldId); - FieldVariable fieldVariable = fapi.loadVariable(fieldVarId); + FieldVariable fieldVariable = getFieldVariable(field, fieldVarId); if (!field.id().equals(fieldVariable.fieldId())) { @@ -270,7 +270,7 @@ public Response getFieldVariableByFieldVar(@PathParam("typeId") final String typ Field field = fapi.byContentTypeIdAndVar(typeId, fieldVar); - FieldVariable fieldVariable = fapi.loadVariable(fieldVarId); + FieldVariable fieldVariable = getFieldVariable(field, fieldVarId); if (!field.id().equals(fieldVariable.fieldId())) { @@ -325,7 +325,7 @@ public Response updateFieldVariableByFieldId(@PathParam("typeId") final String t } else { - FieldVariable currentFieldVariable = fapi.loadVariable(fieldVarId); + FieldVariable currentFieldVariable = getFieldVariable(field, fieldVarId); if (!currentFieldVariable.id().equals(fieldVariable.id())) { @@ -381,7 +381,7 @@ public Response updateFieldVariableByFieldVar(@PathParam("typeId") final String } else { - FieldVariable currentFieldVariable = fapi.loadVariable(fieldVarId); + FieldVariable currentFieldVariable = getFieldVariable(field, fieldVarId); if (!currentFieldVariable.id().equals(fieldVariable.id())) { @@ -425,7 +425,7 @@ public Response deleteFieldVariableByFieldId(@PathParam("typeId") final String t Field field = fapi.find(fieldId); - FieldVariable fieldVariable = fapi.loadVariable(fieldVarId); + FieldVariable fieldVariable = getFieldVariable(field, fieldVarId); if (!fieldVariable.fieldId().equals(field.id())) { @@ -468,7 +468,7 @@ public Response deleteFieldVariableByFieldVar(@PathParam("typeId") final String Field field = fapi.byContentTypeIdAndVar(typeId, fieldVar); - FieldVariable fieldVariable = fapi.loadVariable(fieldVarId); + FieldVariable fieldVariable = getFieldVariable(field, fieldVarId); if (!fieldVariable.fieldId().equals(field.id())) { @@ -492,4 +492,12 @@ public Response deleteFieldVariableByFieldVar(@PathParam("typeId") final String return response; } + + private FieldVariable getFieldVariable(Field field, String fieldVarId) throws NotFoundInDbException { + FieldVariable result = field.fieldVariablesMap().get(fieldVarId); + if (result == null) { + throw new NotFoundInDbException("Field variable with id:" + fieldVarId + " not found"); + } + return result; + } } diff --git a/dotCMS/src/main/java/com/dotmarketing/cache/FieldsCache.java b/dotCMS/src/main/java/com/dotmarketing/cache/FieldsCache.java index 10ee2bdc96d2..3ed6b3807f7e 100644 --- a/dotCMS/src/main/java/com/dotmarketing/cache/FieldsCache.java +++ b/dotCMS/src/main/java/com/dotmarketing/cache/FieldsCache.java @@ -126,12 +126,11 @@ public static void removeField(Field field) { public static List getFieldVariables(Field field) { try { + return new FieldVariableTransformer( - APILocator.getContentTypeFieldAPI().loadVariables( - new LegacyFieldTransformer(field).from() - ) - ).oldFieldList(); - } catch (DotStateException | DotDataException e) { + new LegacyFieldTransformer(field).from().fieldVariables() + ).oldFieldList(); + } catch (DotStateException e) { throw new DotStateException(e); } } diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/structure/factories/FieldFactory.java b/dotCMS/src/main/java/com/dotmarketing/portlets/structure/factories/FieldFactory.java index ce55d7cbacc1..25a979d72316 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/structure/factories/FieldFactory.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/structure/factories/FieldFactory.java @@ -15,6 +15,7 @@ import static com.dotcms.util.CollectionsUtils.set; import com.dotmarketing.business.APILocator; import com.dotmarketing.business.DotStateException; +import com.dotmarketing.business.FactoryLocator; import com.dotmarketing.exception.DotDataException; import com.dotmarketing.exception.DotHibernateException; import com.dotmarketing.exception.DotSecurityException; @@ -261,7 +262,7 @@ public static FieldVariable saveFieldVariable(FieldVariable fieldVar){ */ public static FieldVariable getFieldVariable(String id){ try { - return new FieldVariableTransformer(fapi().loadVariable(id)).oldField(); + return new FieldVariableTransformer(FactoryLocator.getFieldFactory().loadVariable(id)).oldField(); } catch (DotStateException | DotDataException e) { Logger.error(FieldFactory.class, e.getMessage()); } @@ -308,7 +309,7 @@ public static List getFieldVariablesForField (String fieldId ){ public static List getFieldVariablesForField (Field field ){ try { com.dotcms.contenttype.model.field.Field newfield = fapi().find(field.getInode()); - List fl = fapi().loadVariables(newfield); + List fl = newfield.fieldVariables(); return new FieldVariableTransformer(fl).oldFieldList(); } catch (DotStateException | DotDataException e) { Logger.error(FieldFactory.class, e.getMessage());