View Javadoc

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   * Crystallography author formlet, in which there is a crystallographer multiple
19   * input, and a co-constraint between the chemist and crystallography inputs.
20   * 
21   * @author ojd20
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 }