001/* 002 * (C) Copyright 2010 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Anahide Tchertchian 018 */ 019package org.nuxeo.ecm.platform.forms.layout.core.service; 020 021import java.util.List; 022 023import org.apache.commons.lang3.StringUtils; 024import org.nuxeo.ecm.platform.forms.layout.api.LayoutDefinition; 025import org.nuxeo.ecm.platform.forms.layout.api.LayoutTypeDefinition; 026import org.nuxeo.ecm.platform.forms.layout.api.WidgetDefinition; 027import org.nuxeo.ecm.platform.forms.layout.api.WidgetReference; 028import org.nuxeo.ecm.platform.forms.layout.api.WidgetType; 029import org.nuxeo.ecm.platform.forms.layout.api.WidgetTypeDefinition; 030import org.nuxeo.ecm.platform.forms.layout.api.service.LayoutManager; 031import org.nuxeo.ecm.platform.forms.layout.api.service.LayoutStore; 032import org.nuxeo.runtime.api.Framework; 033import org.nuxeo.runtime.model.DefaultComponent; 034 035/** 036 * @author Anahide Tchertchian 037 * @since 5.5 038 */ 039public abstract class AbstractLayoutManager extends DefaultComponent implements LayoutManager { 040 041 private static final long serialVersionUID = 1L; 042 043 public abstract String getDefaultStoreCategory(); 044 045 protected String getStoreCategory(String cat) { 046 if (StringUtils.isBlank(cat)) { 047 return getDefaultStoreCategory(); 048 } 049 return cat; 050 } 051 052 protected LayoutStore getLayoutStore() { 053 return Framework.getService(LayoutStore.class); 054 } 055 056 protected WidgetDefinition lookupWidget(LayoutDefinition layoutDef, WidgetReference widgetRef) { 057 String widgetName = widgetRef.getName(); 058 WidgetDefinition wDef = null; 059 if (layoutDef != null) { 060 wDef = layoutDef.getWidgetDefinition(widgetName); 061 if (wDef != null && wDef.getType() == null) { 062 // consider it's a reference for a global widget 063 wDef = null; 064 } 065 } 066 if (wDef == null) { 067 // try in global registry 068 wDef = lookupWidget(widgetRef); 069 } 070 return wDef; 071 } 072 073 protected WidgetDefinition lookupWidget(WidgetReference widgetRef) { 074 String widgetName = widgetRef.getName(); 075 String cat = widgetRef.getCategory(); 076 WidgetDefinition wDef; 077 if (StringUtils.isBlank(cat)) { 078 wDef = getWidgetDefinition(widgetName); 079 } else { 080 wDef = getLayoutStore().getWidgetDefinition(cat, widgetName); 081 } 082 if (wDef != null) { 083 wDef.setGlobal(true); 084 } 085 return wDef; 086 } 087 088 @Override 089 public WidgetType getWidgetType(String typeName) { 090 return getLayoutStore().getWidgetType(getDefaultStoreCategory(), typeName); 091 } 092 093 @Override 094 public WidgetTypeDefinition getWidgetTypeDefinition(String typeName) { 095 return getLayoutStore().getWidgetTypeDefinition(getDefaultStoreCategory(), typeName); 096 } 097 098 @Override 099 public List<WidgetTypeDefinition> getWidgetTypeDefinitions() { 100 return getLayoutStore().getWidgetTypeDefinitions(getDefaultStoreCategory()); 101 } 102 103 @Override 104 public LayoutTypeDefinition getLayoutTypeDefinition(String typeName) { 105 return getLayoutStore().getLayoutTypeDefinition(getDefaultStoreCategory(), typeName); 106 } 107 108 @Override 109 public List<LayoutTypeDefinition> getLayoutTypeDefinitions() { 110 return getLayoutStore().getLayoutTypeDefinitions(getDefaultStoreCategory()); 111 } 112 113 @Override 114 public LayoutDefinition getLayoutDefinition(String layoutName) { 115 return getLayoutStore().getLayoutDefinition(getDefaultStoreCategory(), layoutName); 116 } 117 118 @Override 119 public List<String> getLayoutDefinitionNames() { 120 return getLayoutStore().getLayoutDefinitionNames(getDefaultStoreCategory()); 121 } 122 123 @Override 124 public WidgetDefinition getWidgetDefinition(String widgetName) { 125 return getLayoutStore().getWidgetDefinition(getDefaultStoreCategory(), widgetName); 126 } 127 128 // registry helpers 129 130 protected void registerWidgetType(WidgetTypeDefinition desc) { 131 getLayoutStore().registerWidgetType(getDefaultStoreCategory(), desc); 132 } 133 134 protected void unregisterWidgetType(WidgetTypeDefinition desc) { 135 getLayoutStore().unregisterWidgetType(getDefaultStoreCategory(), desc); 136 } 137 138 protected void registerLayoutType(LayoutTypeDefinition desc) { 139 getLayoutStore().registerLayoutType(getDefaultStoreCategory(), desc); 140 } 141 142 protected void unregisterLayoutType(LayoutTypeDefinition desc) { 143 getLayoutStore().unregisterLayoutType(getDefaultStoreCategory(), desc); 144 } 145 146 protected void registerLayout(LayoutDefinition layoutDef) { 147 getLayoutStore().registerLayout(getDefaultStoreCategory(), layoutDef); 148 } 149 150 protected void unregisterLayout(LayoutDefinition layoutDef) { 151 getLayoutStore().unregisterLayout(getDefaultStoreCategory(), layoutDef); 152 } 153 154 protected void registerWidget(WidgetDefinition widgetDef) { 155 getLayoutStore().registerWidget(getDefaultStoreCategory(), widgetDef); 156 } 157 158 protected void unregisterWidget(WidgetDefinition widgetDef) { 159 getLayoutStore().unregisterWidget(getDefaultStoreCategory(), widgetDef); 160 } 161 162}