diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplateFinder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplateFinder.java
new file mode 100644
index 000000000..b61c2c79c
--- /dev/null
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplateFinder.java
@@ -0,0 +1,104 @@
+/*
+ * This file is part of ###PROJECT_NAME###
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package org.navalplanner.web.common.components.finders;
+
+import static org.navalplanner.business.i18n.I18nHelper._;
+
+import java.util.List;
+
+import org.navalplanner.business.templates.entities.OrderElementTemplate;
+import org.springframework.transaction.annotation.Transactional;
+import org.zkoss.zul.Listcell;
+import org.zkoss.zul.Listitem;
+import org.zkoss.zul.ListitemRenderer;
+
+/**
+ * @author Óscar González Fernández
+ */
+public abstract class TemplateFinder extends
+ BandboxFinder {
+
+ private final Class type;
+
+ protected TemplateFinder(Class type) {
+ this.type = type;
+ }
+
+ @Override
+ public boolean entryMatchesText(Object obj, String text) {
+ return templateMatchesText(type.cast(obj), text);
+ }
+
+ @Override
+ public String[] getHeaders() {
+ return new String[] { _("Code"), _("Name") };
+ }
+
+ @Override
+ public ListitemRenderer getItemRenderer() {
+ return new ListitemRenderer() {
+
+ @Override
+ public void render(Listitem item, Object data) throws Exception {
+ T template = type.cast(data);
+ item.setValue(data);
+ generateColumnsForRenderer(item, template);
+ }
+ };
+ }
+
+ protected boolean templateMatchesText(T template, String text) {
+ String objectString = normalize(objectToString(template));
+ return objectString.contains(normalize(text));
+ }
+
+ private String normalize(String text) {
+ return text.trim().toLowerCase();
+ }
+
+ @Override
+ public String objectToString(Object obj) {
+ T template = type.cast(obj);
+ return extractStringFor(template);
+ }
+
+ protected String extractStringFor(T template) {
+ return template.getCode() + " :: " + template.getName();
+ }
+
+ @Override
+ @Transactional(readOnly = true)
+ public List extends OrderElementTemplate> getAll() {
+ return getTemplates();
+ }
+
+ protected abstract List getTemplates();
+
+ protected void generateColumnsForRenderer(Listitem item, T template) {
+ final Listcell codeCell = new Listcell();
+ codeCell.setLabel(template.getCode());
+ codeCell.setParent(item);
+
+ final Listcell nameCell = new Listcell();
+ nameCell.setParent(item);
+ nameCell.setLabel(template.getName());
+ }
+
+}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplatesEligibleForOrder.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplatesEligibleForOrder.java
new file mode 100644
index 000000000..07c50d801
--- /dev/null
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplatesEligibleForOrder.java
@@ -0,0 +1,51 @@
+/*
+ * This file is part of ###PROJECT_NAME###
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package org.navalplanner.web.common.components.finders;
+
+import java.util.List;
+
+import org.navalplanner.business.templates.daos.IOrderElementTemplateDAO;
+import org.navalplanner.business.templates.entities.OrderTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author Óscar González Fernández
+ *
+ */
+@Repository
+@Scope(BeanDefinition.SCOPE_PROTOTYPE)
+public class TemplatesEligibleForOrder extends TemplateFinder {
+
+ @Autowired
+ private IOrderElementTemplateDAO templateDAO;
+
+ protected TemplatesEligibleForOrder() {
+ super(OrderTemplate.class);
+ }
+
+ @Override
+ protected List getTemplates() {
+ return templateDAO.list(OrderTemplate.class);
+ }
+
+}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplatesEligibleForSubElement.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplatesEligibleForSubElement.java
new file mode 100644
index 000000000..310484386
--- /dev/null
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/common/components/finders/TemplatesEligibleForSubElement.java
@@ -0,0 +1,62 @@
+/*
+ * This file is part of ###PROJECT_NAME###
+ *
+ * Copyright (C) 2009 Fundación para o Fomento da Calidade Industrial e
+ * Desenvolvemento Tecnolóxico de Galicia
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package org.navalplanner.web.common.components.finders;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.navalplanner.business.templates.daos.IOrderElementTemplateDAO;
+import org.navalplanner.business.templates.entities.OrderElementTemplate;
+import org.navalplanner.business.templates.entities.OrderTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author Óscar González Fernández
+ *
+ */
+@Repository
+@Scope(BeanDefinition.SCOPE_PROTOTYPE)
+public class TemplatesEligibleForSubElement extends
+ TemplateFinder {
+
+ @Autowired
+ private IOrderElementTemplateDAO dao;
+
+ public TemplatesEligibleForSubElement() {
+ super(OrderElementTemplate.class);
+ }
+
+ @Override
+ protected List getTemplates() {
+ List all = dao
+ .list(OrderElementTemplate.class);
+ List result = new ArrayList();
+ for (OrderElementTemplate each : all) {
+ if ((!(each instanceof OrderTemplate))) {
+ result.add(each);
+ }
+ }
+ return result;
+ }
+
+}