1 package org.simantics.document.ui.contribution;
3 import java.util.Collection;
5 import org.eclipse.jface.dialogs.IInputValidator;
6 import org.eclipse.osgi.util.NLS;
7 import org.simantics.Simantics;
8 import org.simantics.browsing.ui.swt.widgets.impl.Widget;
9 import org.simantics.db.ReadGraph;
10 import org.simantics.db.Resource;
11 import org.simantics.db.exception.DatabaseException;
12 import org.simantics.db.management.ISessionContext;
13 import org.simantics.db.request.Read;
14 import org.simantics.layer0.Layer0;
15 import org.simantics.utils.ui.AdaptionUtils;
17 public class NameInputValidator implements IInputValidator, Widget {
19 private Resource selection;
22 public String isValid(final String newText) {
23 if (newText == null || newText.length() == 0)
24 return Messages.NameInputValidator_EmptyNameNotAllowed;
25 if (selection != null) {
27 return Simantics.getSession().syncRequest(new Read<String>() {
29 public String perform(ReadGraph graph) throws DatabaseException {
30 Layer0 l0 = Layer0.getInstance(graph);
31 Resource lib = graph.getPossibleObject(selection, l0.PartOf);
34 Collection<Resource> resources = graph.getObjects(lib, l0.ConsistsOf);
35 for (Resource resource : resources) {
36 if (resource.equals(selection))
38 String n = graph.getPossibleRelatedValue(resource, l0.HasName);
39 if (newText.equals(n))
40 return NLS.bind(Messages.NameInputValidator_CannotHaveDuplicateName, newText);
45 } catch (DatabaseException e) {
46 return e.getMessage();
53 public void setInput(ISessionContext context, Object input) {
54 selection = AdaptionUtils.adaptToSingle(input, Resource.class);