diff --git a/source/java/org/alfresco/web/action/ActionEvaluator.java b/source/java/org/alfresco/web/action/ActionEvaluator.java
new file mode 100644
index 0000000000..7e2a710d9f
--- /dev/null
+++ b/source/java/org/alfresco/web/action/ActionEvaluator.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2005 Alfresco, Inc.
+ *
+ * Licensed under the Mozilla Public License version 1.1
+ * with a permitted attribution clause. You may obtain a
+ * copy of the License at
+ *
+ * http://www.alfresco.org/legal/license.txt
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the
+ * License.
+ */
+package org.alfresco.web.action;
+
+import org.alfresco.web.bean.repository.Node;
+
+/**
+ * Contract supported by all classes that provide dynamic evaluation for a UI action.
+ *
+ * Evaluators are supplied with a Node instance context object.
+ *
+ * The evaluator should decide if the action precondition is valid based on the appropriate
+ * logic and the properties etc. of the Node context and return the result.
+ *
+ * @author Kevin Roast
+ */
+public interface ActionEvaluator
+{
+ public boolean evaluate(Node node);
+}
diff --git a/source/java/org/alfresco/web/action/evaluator/EditDocCIFSEvaluator.java b/source/java/org/alfresco/web/action/evaluator/EditDocCIFSEvaluator.java
new file mode 100644
index 0000000000..9b64833296
--- /dev/null
+++ b/source/java/org/alfresco/web/action/evaluator/EditDocCIFSEvaluator.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2005 Alfresco, Inc.
+ *
+ * Licensed under the Mozilla Public License version 1.1
+ * with a permitted attribution clause. You may obtain a
+ * copy of the License at
+ *
+ * http://www.alfresco.org/legal/license.txt
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the
+ * License.
+ */
+package org.alfresco.web.action.evaluator;
+
+import javax.faces.context.FacesContext;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.service.cmr.lock.LockService;
+import org.alfresco.web.action.ActionEvaluator;
+import org.alfresco.web.app.Application;
+import org.alfresco.web.bean.repository.Node;
+import org.alfresco.web.bean.repository.Repository;
+
+/**
+ * @author Kevin Roast
+ */
+public class EditDocCIFSEvaluator implements ActionEvaluator
+{
+ /**
+ * @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node)
+ */
+ public boolean evaluate(Node node)
+ {
+ FacesContext fc = FacesContext.getCurrentInstance();
+
+ // if the node is inline editable, the default http behaviour should always be used
+ if (node.hasAspect(ContentModel.ASPECT_INLINEEDITABLE) == false &&
+ "webdav".equals(Application.getClientConfig(fc).getEditLinkType()))
+ {
+ LockService lockService =
+ Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getLockService();
+
+ if (Repository.isNodeOwner(node, lockService) == true ||
+ (node.isLocked() == false && node.hasAspect(ContentModel.ASPECT_WORKING_COPY)))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
+/*
+
+
+*/
\ No newline at end of file
diff --git a/source/java/org/alfresco/web/action/evaluator/EditDocHttpEvaluator.java b/source/java/org/alfresco/web/action/evaluator/EditDocHttpEvaluator.java
new file mode 100644
index 0000000000..63526adaba
--- /dev/null
+++ b/source/java/org/alfresco/web/action/evaluator/EditDocHttpEvaluator.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2005 Alfresco, Inc.
+ *
+ * Licensed under the Mozilla Public License version 1.1
+ * with a permitted attribution clause. You may obtain a
+ * copy of the License at
+ *
+ * http://www.alfresco.org/legal/license.txt
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the
+ * License.
+ */
+package org.alfresco.web.action.evaluator;
+
+import javax.faces.context.FacesContext;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.service.cmr.lock.LockService;
+import org.alfresco.web.action.ActionEvaluator;
+import org.alfresco.web.app.Application;
+import org.alfresco.web.bean.repository.Node;
+import org.alfresco.web.bean.repository.Repository;
+
+/**
+ * @author Kevin Roast
+ */
+public class EditDocHttpEvaluator implements ActionEvaluator
+{
+ /**
+ * @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node)
+ */
+ public boolean evaluate(Node node)
+ {
+ FacesContext fc = FacesContext.getCurrentInstance();
+
+ // if the node is inline editable, the default http behaviour should
+ // always be used otherwise the configured approach is used
+ if (node.hasAspect(ContentModel.ASPECT_INLINEEDITABLE) == true ||
+ "http".equals(Application.getClientConfig(fc).getEditLinkType()))
+ {
+ LockService lockService =
+ Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getLockService();
+
+ if (Repository.isNodeOwner(node, lockService) == true ||
+ (node.isLocked() == false && node.hasAspect(ContentModel.ASPECT_WORKING_COPY)))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
+/*
+
+
+*/
\ No newline at end of file
diff --git a/source/java/org/alfresco/web/action/evaluator/EditDocWebDavEvaluator.java b/source/java/org/alfresco/web/action/evaluator/EditDocWebDavEvaluator.java
new file mode 100644
index 0000000000..33a2ea78a2
--- /dev/null
+++ b/source/java/org/alfresco/web/action/evaluator/EditDocWebDavEvaluator.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2005 Alfresco, Inc.
+ *
+ * Licensed under the Mozilla Public License version 1.1
+ * with a permitted attribution clause. You may obtain a
+ * copy of the License at
+ *
+ * http://www.alfresco.org/legal/license.txt
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+ * either express or implied. See the License for the specific
+ * language governing permissions and limitations under the
+ * License.
+ */
+package org.alfresco.web.action.evaluator;
+
+import javax.faces.context.FacesContext;
+
+import org.alfresco.model.ContentModel;
+import org.alfresco.service.cmr.lock.LockService;
+import org.alfresco.web.action.ActionEvaluator;
+import org.alfresco.web.app.Application;
+import org.alfresco.web.bean.repository.Node;
+import org.alfresco.web.bean.repository.Repository;
+
+/**
+ * @author Kevin Roast
+ */
+public class EditDocWebDavEvaluator implements ActionEvaluator
+{
+ /**
+ * @see org.alfresco.web.action.ActionEvaluator#evaluate(org.alfresco.web.bean.repository.Node)
+ */
+ public boolean evaluate(Node node)
+ {
+ FacesContext fc = FacesContext.getCurrentInstance();
+
+ // if the node is inline editable, the default http behaviour should always be used
+ if (node.hasAspect(ContentModel.ASPECT_INLINEEDITABLE) == false &&
+ "cifs".equals(Application.getClientConfig(fc).getEditLinkType()))
+ {
+ LockService lockService =
+ Repository.getServiceRegistry(FacesContext.getCurrentInstance()).getLockService();
+
+ if (Repository.isNodeOwner(node, lockService) == true ||
+ (node.isLocked() == false && node.hasAspect(ContentModel.ASPECT_WORKING_COPY)))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
+/*
+
+
+*/
\ No newline at end of file