1 package uk.ac.cam.spectra.spectrasub.components;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import org.apache.tapestry.event.PageEvent;
7 import org.apache.tapestry.form.IFormComponent;
8 import org.apache.tapestry.valid.IValidationDelegate;
9 import org.apache.tapestry.valid.ValidationConstraint;
10
11 import uk.ac.cam.spectra.cif.CrystMetadata;
12 import uk.ac.cam.spectra.spectrasub.DataPackage;
13 import uk.ac.cam.spectra.spectrasub.Name;
14
15 import com.hp.hpl.jena.rdf.model.Resource;
16
17
18
19
20
21
22
23
24 public abstract class CrystAuthorFormlet extends DefaultAuthorFormlet {
25
26 @Override
27 public void pageBeginRender(PageEvent event) {
28 LOG.debug("CrystAuthorFormlet beginning render");
29 if (getNewCrystallographer() == null) {
30 setNewCrystallographer(new Name());
31 }
32
33 if (event.getRequestCycle().isRewinding()) {
34 LOG.debug("Form is rewinding");
35 if (getCrystallographers() == null) {
36 List<Name> cs = new ArrayList<Name>(3);
37 setCrystallographers(cs);
38 }
39 }
40
41 super.pageBeginRender(event);
42 }
43
44 @Override
45 public void setupPage(DataPackage p) {
46 LOG.debug("setup page");
47 List<String> cNames = p.getValues(CrystMetadata.CRYSTALLOGRAPHER);
48 List<Name> cs = new ArrayList<Name>(cNames.size());
49 for (String c : cNames) {
50 Name name = Name.decode(c);
51 if (!name.isBlank()) {
52 cs.add(name);
53 }
54 }
55 if (getNewCrystallographer() != null) {
56 LOG.debug("Adding new crystallographer");
57 cs.add(getNewCrystallographer());
58 setNewCrystallographer(new Name());
59 }
60 LOG.debug("Setting " + cs.size() + " crystallographers: " + cs);
61 setCrystallographers(cs);
62
63 super.setupPage(p);
64 }
65
66 @Override
67 public void validate(IValidationDelegate delegate) {
68 if (getChemists().isEmpty() && getNewChemist().isBlank()
69 && getCrystallographers().isEmpty()
70 && getNewCrystallographer().isBlank()) {
71 delegate
72 .setFormComponent((IFormComponent) getComponent("newChemistSurname"));
73 delegate.record("At least one Chemist required",
74 ValidationConstraint.REQUIRED);
75 }
76 }
77
78 @Override
79 public void writeMetadata(Resource resource) {
80 LOG.debug("Submission. Crysts: " + getCrystallographers());
81 if (!Name.isEmpty(getCrystallographers())) {
82 LOG.debug("Not empty");
83 for (Name n : Name.trim(getCrystallographers())) {
84 LOG.debug("adding " + n);
85 CrystMetadata.CRYSTALLOGRAPHER.add(resource, n.toString());
86 }
87 }
88
89 LOG.debug("Extra cryst." + getNewCrystallographer());
90 if (getNewCrystallographer() != null
91 && !getNewCrystallographer().isBlank()) {
92 CrystMetadata.CRYSTALLOGRAPHER.add(resource,
93 getNewCrystallographer().toString());
94 setNewCrystallographer(new Name());
95 }
96 super.writeMetadata(resource);
97 }
98
99 public abstract Name getNewCrystallographer();
100
101 public abstract void setNewCrystallographer(Name name);
102
103 public abstract List<Name> getCrystallographers();
104
105 public abstract void setCrystallographers(List<Name> cs);
106
107 public abstract Name getCrystName();
108
109 }