Revision 32764
Added by Michele Artini almost 10 years ago
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/deploy.info | ||
---|---|---|
1 |
{"type_source": "SVN", "goal": "package -U -T 4C source:jar", "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet40/modules/cnr-data-utility-cleaner-service/trunk/", "deploy_repository": "dnet4-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet4-snapshots", "name": "cnr-data-utility-cleaner-service"} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/test/java/eu/dnetlib/data/utility/cleaner/VocabularyRuleTest.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import static org.junit.Assert.assertEquals; |
|
4 |
import static org.junit.Assert.assertNotNull; |
|
5 |
import static org.junit.Assert.assertNull; |
|
6 |
import static org.mockito.Matchers.anyString; |
|
7 |
import static org.mockito.Mockito.times; |
|
8 |
import static org.mockito.Mockito.verify; |
|
9 |
import static org.mockito.Mockito.when; |
|
10 |
|
|
11 |
import java.io.StringReader; |
|
12 |
import java.util.List; |
|
13 |
|
|
14 |
import org.dom4j.Document; |
|
15 |
import org.dom4j.io.SAXReader; |
|
16 |
import org.junit.Before; |
|
17 |
import org.junit.Test; |
|
18 |
import org.junit.runner.RunWith; |
|
19 |
import org.mockito.Mock; |
|
20 |
import org.mockito.runners.MockitoJUnit44Runner; |
|
21 |
|
|
22 |
import com.google.common.collect.Lists; |
|
23 |
import com.google.common.collect.Sets; |
|
24 |
|
|
25 |
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; |
|
26 |
|
|
27 |
@RunWith(MockitoJUnit44Runner.class) |
|
28 |
public class VocabularyRuleTest { |
|
29 |
|
|
30 |
private static final String VOCABULARY_NAME_1 = "TEST VOCABULARY 1"; |
|
31 |
private static final String VOCABULARY_NAME_2 = "TEST VOCABULARY 2"; |
|
32 |
private static final List<String> VOCABULARY = Lists.newArrayList("XXXX|-:-|AAAA", "YYYY|-:-|AAAA", "ZZZZ|-:-|AAAA"); |
|
33 |
|
|
34 |
/** |
|
35 |
* Class Under Test |
|
36 |
*/ |
|
37 |
private VocabularyRule rule; |
|
38 |
|
|
39 |
@Mock |
|
40 |
private ISLookUpService lookup; |
|
41 |
|
|
42 |
@Before |
|
43 |
public void setUp() throws Exception { |
|
44 |
when(lookup.quickSearchProfile(anyString())).thenReturn(VOCABULARY); |
|
45 |
|
|
46 |
rule = new VocabularyRule(Sets.newHashSet(VOCABULARY_NAME_1, VOCABULARY_NAME_2), lookup); |
|
47 |
} |
|
48 |
|
|
49 |
@Test |
|
50 |
public void testSetup() throws Exception { |
|
51 |
final String xpath = "/a/b"; |
|
52 |
rule.setXpath(xpath); |
|
53 |
|
|
54 |
execute("<a><b>XXXX</b></a>"); |
|
55 |
|
|
56 |
verify(lookup, times(2)).quickSearchProfile(anyString()); |
|
57 |
assertEquals(VOCABULARY.size(), rule.getVocabularyTerms().size()); |
|
58 |
} |
|
59 |
|
|
60 |
@Test |
|
61 |
public void testApplyXpathRule() throws Exception { |
|
62 |
final String xpath = "/a/b"; |
|
63 |
rule.setXpath(xpath); |
|
64 |
final Document doc = execute("<a><b>XXXX</b></a>"); |
|
65 |
assertEquals("AAAA", doc.valueOf(xpath)); |
|
66 |
assertNull(rule.verifyValue("AAAA")); |
|
67 |
assertNotNull(rule.verifyValue("XXXX")); |
|
68 |
} |
|
69 |
|
|
70 |
@Test |
|
71 |
public void testApplyXpathRule_2() throws Exception { |
|
72 |
final String xpath = "/a/b"; |
|
73 |
rule.setXpath(xpath); |
|
74 |
final Document doc = execute("<a><b>XXXX</b></a>"); |
|
75 |
assertEquals("AAAA", doc.valueOf(xpath)); |
|
76 |
assertNull(rule.verifyValue("AAAA")); |
|
77 |
assertNotNull(rule.verifyValue("XXXX")); |
|
78 |
} |
|
79 |
|
|
80 |
@Test |
|
81 |
public void testApplyXpathRule_3() throws Exception { |
|
82 |
final String xpath = "/a/b"; |
|
83 |
rule.setXpath(xpath); |
|
84 |
final Document doc = execute("<a><b>XXXX</b></a>"); |
|
85 |
assertEquals("AAAA", doc.valueOf(xpath)); |
|
86 |
} |
|
87 |
|
|
88 |
@Test |
|
89 |
public void testApplyXpathRule_attr() throws Exception { |
|
90 |
final String xpath = "/a/b/@value"; |
|
91 |
rule.setXpath(xpath); |
|
92 |
final Document doc = execute("<a><b value='XXXX' /></a>"); |
|
93 |
assertEquals("AAAA", doc.valueOf(xpath)); |
|
94 |
assertNull(rule.verifyValue("AAAA")); |
|
95 |
assertNotNull(rule.verifyValue("XXXX")); |
|
96 |
} |
|
97 |
|
|
98 |
@Test |
|
99 |
public void testApplyXpathRule_with_spaces() throws Exception { |
|
100 |
final String xpath = "/a/b"; |
|
101 |
rule.setXpath(xpath); |
|
102 |
final Document doc = execute("<a><b> XXXX </b></a>"); |
|
103 |
assertEquals("AAAA", doc.valueOf(xpath)); |
|
104 |
assertNull(rule.verifyValue("AAAA")); |
|
105 |
assertNotNull(rule.verifyValue(" XXXX ")); |
|
106 |
} |
|
107 |
|
|
108 |
@Test |
|
109 |
public void testApplyXpathRule_case() throws Exception { |
|
110 |
final String xpath = "/a/b"; |
|
111 |
rule.setXpath(xpath); |
|
112 |
final Document doc = execute("<a><b>Xxxx</b></a>"); |
|
113 |
assertEquals("AAAA", doc.valueOf(xpath)); |
|
114 |
assertNull(rule.verifyValue("AAAA")); |
|
115 |
assertNotNull(rule.verifyValue("Xxxx")); |
|
116 |
} |
|
117 |
|
|
118 |
private Document execute(final String xml) throws Exception { |
|
119 |
final SAXReader reader = new SAXReader(); |
|
120 |
final Document doc = reader.read(new StringReader(xml)); |
|
121 |
System.out.println("BEFORE:\n" + doc.asXML() + "\n"); |
|
122 |
rule.applyXpathRule(doc); |
|
123 |
System.out.println("AFTER:\n" + doc.asXML() + "\n"); |
|
124 |
System.out.println("-----------------------------\n"); |
|
125 |
return doc; |
|
126 |
} |
|
127 |
|
|
128 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/test/java/eu/dnetlib/data/utility/cleaner/XMLCleaningRuleTest.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import static org.junit.Assert.assertFalse; |
|
4 |
import static org.junit.Assert.assertTrue; |
|
5 |
|
|
6 |
import java.util.HashMap; |
|
7 |
import java.util.Map; |
|
8 |
|
|
9 |
import org.junit.Before; |
|
10 |
import org.junit.Test; |
|
11 |
import org.junit.runner.RunWith; |
|
12 |
import org.mockito.runners.MockitoJUnit44Runner; |
|
13 |
|
|
14 |
import com.google.common.collect.Lists; |
|
15 |
|
|
16 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
17 |
|
|
18 |
@RunWith(MockitoJUnit44Runner.class) |
|
19 |
public class XMLCleaningRuleTest { |
|
20 |
|
|
21 |
private static final String INPUT_VALID = "<record>" + " <header />" + " <metadata>" + " <a>HELLO</a>" + " </metadata>" + "</record>"; |
|
22 |
|
|
23 |
private static final String INPUT_INVALID = "<record>" + " <header />" + " <metadata>" + " <a>GOOD BYE</a>" + " </metadata>" + "</record>"; |
|
24 |
|
|
25 |
/** |
|
26 |
* Class under test. |
|
27 |
*/ |
|
28 |
private CleaningRule xmlRule; |
|
29 |
private XPATHCleaningRule mockXpathRule = new XPATHCleaningRule() { |
|
30 |
|
|
31 |
@Override |
|
32 |
protected Map<String, String> verifyValue(final String value) throws CleanerException { |
|
33 |
if (value.equals("CIAO")) { return null; } |
|
34 |
|
|
35 |
Map<String, String> err = new HashMap<String, String>(); |
|
36 |
err.put("term", value); |
|
37 |
return err; |
|
38 |
} |
|
39 |
|
|
40 |
@Override |
|
41 |
protected String calculateNewValue(final String oldValue) throws CleanerException { |
|
42 |
if (oldValue.equals("HELLO")) { return "CIAO"; } |
|
43 |
return oldValue; |
|
44 |
} |
|
45 |
};; |
|
46 |
|
|
47 |
@Before |
|
48 |
public void setUp() throws Exception { |
|
49 |
xmlRule = new CleaningRule(); |
|
50 |
|
|
51 |
mockXpathRule.setStrict(true); |
|
52 |
mockXpathRule.setXpath("//a"); |
|
53 |
|
|
54 |
xmlRule.setXpathRules(Lists.newArrayList(mockXpathRule)); |
|
55 |
} |
|
56 |
|
|
57 |
@Test |
|
58 |
public void testEvaluate_valid() { |
|
59 |
String s = xmlRule.evaluate(INPUT_VALID); |
|
60 |
assertTrue(s.contains("CIAO")); |
|
61 |
assertFalse(s.contains("invalid")); |
|
62 |
} |
|
63 |
|
|
64 |
@Test |
|
65 |
public void testEvaluate_invalid() { |
|
66 |
String s = xmlRule.evaluate(INPUT_INVALID); |
|
67 |
System.out.println(s); |
|
68 |
assertFalse(s.contains("CIAO")); |
|
69 |
assertTrue(s.contains("invalid")); |
|
70 |
} |
|
71 |
|
|
72 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/test/java/eu/dnetlib/data/utility/cleaner/CleanerServiceImplTest.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import static org.junit.Assert.assertEquals; |
|
4 |
import static org.junit.Assert.assertNotNull; |
|
5 |
import static org.mockito.Mockito.verify; |
|
6 |
import static org.mockito.Mockito.when; |
|
7 |
|
|
8 |
import javax.xml.ws.wsaddressing.W3CEndpointReference; |
|
9 |
|
|
10 |
import org.junit.Before; |
|
11 |
import org.junit.Test; |
|
12 |
import org.junit.runner.RunWith; |
|
13 |
import org.mockito.Mock; |
|
14 |
import org.mockito.runners.MockitoJUnit44Runner; |
|
15 |
|
|
16 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
17 |
import eu.dnetlib.enabling.resultset.MappedResultSetFactory; |
|
18 |
import eu.dnetlib.test.utils.EPRTestUtil; |
|
19 |
|
|
20 |
@RunWith(MockitoJUnit44Runner.class) |
|
21 |
public class CleanerServiceImplTest { |
|
22 |
|
|
23 |
/** |
|
24 |
* Class under test. |
|
25 |
*/ |
|
26 |
private CleanerServiceImpl service; |
|
27 |
|
|
28 |
@Mock |
|
29 |
private CleaningRuleFactory cleaningRuleFactory; |
|
30 |
@Mock |
|
31 |
private MappedResultSetFactory mappedResultSetFactory; |
|
32 |
@Mock |
|
33 |
private CleaningRule cleaningRule; |
|
34 |
|
|
35 |
private W3CEndpointReference epr_IN = EPRTestUtil.getTestEpr("http://1"); |
|
36 |
private W3CEndpointReference epr_OUT = EPRTestUtil.getTestEpr("http://2"); |
|
37 |
|
|
38 |
private static final String RULE_ID = "RULE_01"; |
|
39 |
|
|
40 |
@Before |
|
41 |
public void setUp() throws Exception { |
|
42 |
when(cleaningRuleFactory.obtainCleaningRule(RULE_ID)).thenReturn(cleaningRule); |
|
43 |
when(mappedResultSetFactory.createMappedResultSet(epr_IN, cleaningRule)).thenReturn(epr_OUT); |
|
44 |
|
|
45 |
service = new CleanerServiceImpl(); |
|
46 |
service.setCleaningRuleFactory(cleaningRuleFactory); |
|
47 |
service.setMappedResultSetFactory(mappedResultSetFactory); |
|
48 |
} |
|
49 |
|
|
50 |
@Test |
|
51 |
public void testClean() throws CleanerException { |
|
52 |
W3CEndpointReference epr = service.clean(epr_IN, RULE_ID); |
|
53 |
assertNotNull(epr); |
|
54 |
assertEquals(epr_OUT, epr); |
|
55 |
verify(cleaningRuleFactory).obtainCleaningRule(RULE_ID); |
|
56 |
} |
|
57 |
|
|
58 |
@Test(expected = CleanerException.class) |
|
59 |
public void testClean_null_1() throws CleanerException { |
|
60 |
service.clean(epr_IN, null); |
|
61 |
} |
|
62 |
|
|
63 |
@Test(expected = CleanerException.class) |
|
64 |
public void testClean_null_2() throws CleanerException { |
|
65 |
service.clean(null, RULE_ID); |
|
66 |
} |
|
67 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/test/java/eu/dnetlib/data/utility/cleaner/GroovyRuleTest.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import static org.junit.Assert.assertEquals; |
|
4 |
import static org.junit.Assert.assertTrue; |
|
5 |
|
|
6 |
import java.io.StringReader; |
|
7 |
import java.util.List; |
|
8 |
|
|
9 |
import org.dom4j.Document; |
|
10 |
import org.dom4j.Node; |
|
11 |
import org.dom4j.io.SAXReader; |
|
12 |
import org.junit.Test; |
|
13 |
import org.junit.runner.RunWith; |
|
14 |
import org.mockito.runners.MockitoJUnit44Runner; |
|
15 |
|
|
16 |
@RunWith(MockitoJUnit44Runner.class) |
|
17 |
public class GroovyRuleTest { |
|
18 |
|
|
19 |
@Test |
|
20 |
public void testApplyXpathRule_simple_constant() throws Exception { |
|
21 |
final GroovyRule rule = new GroovyRule("'YYYY'"); |
|
22 |
|
|
23 |
final String xpath = "/a/b"; |
|
24 |
|
|
25 |
rule.setXpath(xpath); |
|
26 |
|
|
27 |
final Document doc = execute(rule, "<a><b>XXXX</b></a>"); |
|
28 |
|
|
29 |
assertEquals("YYYY", doc.valueOf(xpath)); |
|
30 |
} |
|
31 |
|
|
32 |
@Test |
|
33 |
public void testApplyXpathRule_simple_regex() throws Exception { |
|
34 |
final GroovyRule rule = new GroovyRule("(input =~ /X/).replaceAll('Y')"); |
|
35 |
|
|
36 |
final String xpath = "/a/b"; |
|
37 |
|
|
38 |
rule.setXpath(xpath); |
|
39 |
|
|
40 |
final Document doc = execute(rule, "<a><b>aXaXa</b></a>"); |
|
41 |
|
|
42 |
assertEquals("aYaYa", doc.valueOf(xpath)); |
|
43 |
} |
|
44 |
|
|
45 |
@Test |
|
46 |
public void testApplyXpathRule_simple_upper() throws Exception { |
|
47 |
final GroovyRule rule = new GroovyRule("input.toUpperCase()"); |
|
48 |
|
|
49 |
final String xpath = "/a/b"; |
|
50 |
|
|
51 |
rule.setXpath(xpath); |
|
52 |
|
|
53 |
final Document doc = execute(rule, "<a><b>xyz</b></a>"); |
|
54 |
|
|
55 |
assertEquals("XYZ", doc.valueOf(xpath)); |
|
56 |
} |
|
57 |
|
|
58 |
@Test |
|
59 |
public void testApplyXpathRule_multi() throws Exception { |
|
60 |
final GroovyRule rule = new GroovyRule("'Y'"); |
|
61 |
|
|
62 |
final String xpath = "/a/b"; |
|
63 |
|
|
64 |
rule.setXpath(xpath); |
|
65 |
|
|
66 |
final Document doc = execute(rule, "<a><b>X</b><b>X</b><b>X</b></a>"); |
|
67 |
|
|
68 |
List<?> list = doc.selectNodes(xpath); |
|
69 |
|
|
70 |
assertEquals(3, list.size()); |
|
71 |
for (Object o : list) { |
|
72 |
assertEquals("Y", ((Node) o).getText()); |
|
73 |
} |
|
74 |
|
|
75 |
} |
|
76 |
|
|
77 |
@Test |
|
78 |
public void testApplyXpathRule_singleAttr() throws Exception { |
|
79 |
final GroovyRule rule = new GroovyRule("'BBBB'"); |
|
80 |
|
|
81 |
final String xpath = "/a/b/@value"; |
|
82 |
|
|
83 |
rule.setXpath(xpath); |
|
84 |
|
|
85 |
final Document doc = execute(rule, "<a><b value='AAAA'>XXXX</b></a>"); |
|
86 |
|
|
87 |
assertEquals("BBBB", doc.valueOf(xpath)); |
|
88 |
assertEquals("XXXX", doc.valueOf("/a/b")); |
|
89 |
} |
|
90 |
|
|
91 |
@Test |
|
92 |
public void testApplyXpathRule_multiAttr() throws Exception { |
|
93 |
final GroovyRule rule = new GroovyRule("'B'"); |
|
94 |
|
|
95 |
final String xpath = "/a/b/@value"; |
|
96 |
|
|
97 |
rule.setXpath(xpath); |
|
98 |
|
|
99 |
final Document doc = execute(rule, "<a><b value='a' /><b value='b' /><b value='c' /></a>"); |
|
100 |
|
|
101 |
final List<?> list = doc.selectNodes(xpath); |
|
102 |
|
|
103 |
assertEquals(3, list.size()); |
|
104 |
for (Object o : list) { |
|
105 |
assertEquals("B", ((Node) o).getText()); |
|
106 |
} |
|
107 |
} |
|
108 |
|
|
109 |
@Test |
|
110 |
public void testApplyXpathRule_complex() throws Exception { |
|
111 |
final GroovyRule rule = new GroovyRule("'B'"); |
|
112 |
|
|
113 |
final String xpath = "/a/b"; |
|
114 |
|
|
115 |
rule.setXpath(xpath); |
|
116 |
|
|
117 |
final Document doc = execute(rule, "<a><b>X<c>C</c></b></a>"); |
|
118 |
|
|
119 |
assertTrue(doc.valueOf(xpath).contains("B")); |
|
120 |
assertEquals("C", doc.valueOf("/a/b/c")); |
|
121 |
} |
|
122 |
|
|
123 |
private Document execute(final GroovyRule rule, final String xml) throws Exception { |
|
124 |
|
|
125 |
final SAXReader reader = new SAXReader(); |
|
126 |
final Document doc = reader.read(new StringReader(xml)); |
|
127 |
|
|
128 |
System.out.println("BEFORE:\n" + doc.asXML() + "\n"); |
|
129 |
rule.applyXpathRule(doc); |
|
130 |
System.out.println("AFTER:\n" + doc.asXML() + "\n"); |
|
131 |
|
|
132 |
System.out.println("-----------------------------\n"); |
|
133 |
return doc; |
|
134 |
} |
|
135 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/VocabularyRule.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import java.util.HashMap; |
|
4 |
import java.util.Map; |
|
5 |
import java.util.Set; |
|
6 |
|
|
7 |
import org.apache.commons.logging.Log; |
|
8 |
import org.apache.commons.logging.LogFactory; |
|
9 |
|
|
10 |
import com.google.common.base.Joiner; |
|
11 |
import com.google.common.collect.Maps; |
|
12 |
import com.google.common.collect.Sets; |
|
13 |
|
|
14 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
15 |
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; |
|
16 |
|
|
17 |
/** |
|
18 |
* @author michele |
|
19 |
* |
|
20 |
* Vocabulary rules must be declared in a CleanerDS profile, for each vocabulary must be present the relative VocabularyDS profile: |
|
21 |
* |
|
22 |
* <RULE xpath="..." vocabularies="VOC1" /> <RULE xpath="..." vocabularies="VOC1, VOC2, VOC3" /> |
|
23 |
*/ |
|
24 |
|
|
25 |
public class VocabularyRule extends XPATHCleaningRule { |
|
26 |
|
|
27 |
private Set<String> vocabularies; |
|
28 |
|
|
29 |
private static final Log log = LogFactory.getLog(VocabularyRule.class); // NOPMD by marko on 11/24/08 5:02 PM |
|
30 |
|
|
31 |
private Map<String, String> synonyms = Maps.newHashMap(); |
|
32 |
private Set<String> validTerms = Sets.newHashSet(); |
|
33 |
|
|
34 |
public VocabularyRule(final Set<String> vocabularies, final ISLookUpService lookup) throws CleanerException { |
|
35 |
this.vocabularies = vocabularies; |
|
36 |
|
|
37 |
loadSynonymsAndTerms(lookup); |
|
38 |
} |
|
39 |
|
|
40 |
@Override |
|
41 |
protected String calculateNewValue(final String oldValue) throws CleanerException { |
|
42 |
log.debug("calculating new value for: " + oldValue); |
|
43 |
|
|
44 |
if (synonyms.isEmpty()) { |
|
45 |
log.warn("Vocabulary terms is void, vocabularies: " + this.vocabularies); |
|
46 |
} |
|
47 |
|
|
48 |
String newValue = null; |
|
49 |
|
|
50 |
if (synonyms.containsKey(oldValue.toLowerCase())) { |
|
51 |
newValue = synonyms.get(oldValue.toLowerCase()); |
|
52 |
} |
|
53 |
|
|
54 |
if (newValue == null) { |
|
55 |
log.debug("Synonym " + oldValue + " not found in vocabulary"); |
|
56 |
return oldValue; |
|
57 |
} |
|
58 |
|
|
59 |
return newValue; |
|
60 |
} |
|
61 |
|
|
62 |
private void loadSynonymsAndTerms(final ISLookUpService lookup) throws CleanerException { |
|
63 |
|
|
64 |
for (final String vocabulary : vocabularies) { |
|
65 |
try { |
|
66 |
final String query = "for $x in collection('/db/DRIVER/VocabularyDSResources/VocabularyDSResourceType')" |
|
67 |
+ "//RESOURCE_PROFILE[.//VOCABULARY_NAME/@code='" + vocabulary + "']//TERM return " |
|
68 |
+ "( concat($x/@code,'|-:-|', $x/@code), concat($x/@english_name,'|-:-|', $x/@code), concat($x/@native_name,'|-:-|', $x/@code), " |
|
69 |
+ "for $y in $x//SYNONYM return concat($y/@term,'|-:-|', $x/@code) )"; |
|
70 |
|
|
71 |
for (final String s : lookup.quickSearchProfile(query)) { |
|
72 |
log.debug("SYNONYM : " + s); |
|
73 |
final String[] arr = s.split("\\|-:-\\|"); |
|
74 |
if (arr[0] == null || arr[0].isEmpty()) { |
|
75 |
continue; |
|
76 |
} |
|
77 |
synonyms.put(arr[0].toLowerCase(), arr[1]); |
|
78 |
validTerms.add(arr[1].toLowerCase()); |
|
79 |
} |
|
80 |
|
|
81 |
log.info("VOCABULARY " + vocabulary.trim() + " - terms size " + synonyms.size()); |
|
82 |
} catch (final Exception e) { |
|
83 |
throw new CleanerException("Error obtaining vocabulary " + vocabulary, e); |
|
84 |
} |
|
85 |
} |
|
86 |
|
|
87 |
} |
|
88 |
|
|
89 |
@Override |
|
90 |
protected Map<String, String> verifyValue(final String value) throws CleanerException { |
|
91 |
if (synonyms.isEmpty()) { |
|
92 |
log.warn("Vocabulary terms is void, vocabularies: " + this.vocabularies); |
|
93 |
} |
|
94 |
|
|
95 |
if (validTerms.contains(value.toLowerCase())) { return null; } |
|
96 |
|
|
97 |
final Map<String, String> error = new HashMap<String, String>(); |
|
98 |
error.put("term", value); |
|
99 |
error.put("vocabularies", this.vocabularies.toString().replaceAll("\\[", "").replaceAll("\\]", "")); |
|
100 |
error.put("xpath", this.getXpath()); |
|
101 |
return error; |
|
102 |
} |
|
103 |
|
|
104 |
public Map<String, String> getVocabularyTerms() { |
|
105 |
return synonyms; |
|
106 |
} |
|
107 |
|
|
108 |
@Override |
|
109 |
public String toString() { |
|
110 |
return "VOCABULARIES: [" + Joiner.on(", ").join(vocabularies) + "]"; |
|
111 |
} |
|
112 |
|
|
113 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/CleaningRuleFactory.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import java.io.StringReader; |
|
4 |
import java.util.HashSet; |
|
5 |
import java.util.List; |
|
6 |
import java.util.Set; |
|
7 |
|
|
8 |
import org.dom4j.Document; |
|
9 |
import org.dom4j.Element; |
|
10 |
import org.dom4j.io.SAXReader; |
|
11 |
import org.springframework.beans.factory.annotation.Required; |
|
12 |
|
|
13 |
import com.google.common.base.Splitter; |
|
14 |
import com.google.common.collect.Lists; |
|
15 |
import com.google.common.collect.Sets; |
|
16 |
|
|
17 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
18 |
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException; |
|
19 |
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService; |
|
20 |
import eu.dnetlib.enabling.locators.UniqueServiceLocator; |
|
21 |
|
|
22 |
public class CleaningRuleFactory { |
|
23 |
|
|
24 |
private UniqueServiceLocator serviceLocator; |
|
25 |
|
|
26 |
public CleaningRule obtainCleaningRule(final String ruleId) throws CleanerException { |
|
27 |
try { |
|
28 |
final String prof = serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery( |
|
29 |
"/RESOURCE_PROFILE[.//RESOURCE_IDENTIFIER/@value='" + ruleId + "' or .//CLEANER_NAME='" + ruleId + "']//CONFIGURATION"); |
|
30 |
|
|
31 |
final SAXReader reader = new SAXReader(); |
|
32 |
final Document doc = reader.read(new StringReader(prof)); |
|
33 |
|
|
34 |
final CleaningRule rule = new CleaningRule(); |
|
35 |
|
|
36 |
final ISLookUpService lookup = serviceLocator.getService(ISLookUpService.class); |
|
37 |
|
|
38 |
for (Object o : doc.selectNodes("//RULE")) { |
|
39 |
final Element node = (Element) o; |
|
40 |
|
|
41 |
final String xpath = node.valueOf("@xpath"); |
|
42 |
final String vocabularies = node.valueOf("@vocabularies"); |
|
43 |
final String groovyRule = node.valueOf("@groovy"); |
|
44 |
final String strict = node.valueOf("@strict"); |
|
45 |
|
|
46 |
final XPATHCleaningRule xpathRule; |
|
47 |
if (vocabularies != null && vocabularies.length() > 0) { |
|
48 |
final Set<String> list = Sets.newHashSet(Splitter.on(",").omitEmptyStrings().trimResults().split(vocabularies)); |
|
49 |
xpathRule = new VocabularyRule(list, lookup); |
|
50 |
} else { |
|
51 |
xpathRule = new GroovyRule(groovyRule); |
|
52 |
} |
|
53 |
xpathRule.setXpath(xpath); |
|
54 |
xpathRule.setStrict("true".equals(strict)); |
|
55 |
rule.getXpathRules().add(xpathRule); |
|
56 |
} |
|
57 |
return rule; |
|
58 |
} catch (Exception e) { |
|
59 |
throw new CleanerException("Error obtaing cleaner rule " + ruleId, e); |
|
60 |
} |
|
61 |
} |
|
62 |
|
|
63 |
public List<String> getRuleIds() throws CleanerException { |
|
64 |
try { |
|
65 |
final HashSet<String> response = new HashSet<String>(); |
|
66 |
|
|
67 |
final List<String> list = serviceLocator.getService(ISLookUpService.class).quickSearchProfile("//CLEANER_NAME"); |
|
68 |
if (list != null) { |
|
69 |
response.addAll(list); |
|
70 |
} |
|
71 |
|
|
72 |
return Lists.newArrayList(response); |
|
73 |
} catch (ISLookUpException e) { |
|
74 |
throw new CleanerException("Error obtaining IDs of cleaner DSs", e); |
|
75 |
} |
|
76 |
} |
|
77 |
|
|
78 |
public UniqueServiceLocator getServiceLocator() { |
|
79 |
return serviceLocator; |
|
80 |
} |
|
81 |
|
|
82 |
@Required |
|
83 |
public void setServiceLocator(final UniqueServiceLocator serviceLocator) { |
|
84 |
this.serviceLocator = serviceLocator; |
|
85 |
} |
|
86 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/inspector/CleanerInspector.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner.inspector; |
|
2 |
|
|
3 |
import java.util.List; |
|
4 |
|
|
5 |
import javax.annotation.Resource; |
|
6 |
|
|
7 |
import org.springframework.stereotype.Controller; |
|
8 |
import org.springframework.ui.Model; |
|
9 |
import org.springframework.web.bind.annotation.RequestMapping; |
|
10 |
import org.springframework.web.bind.annotation.RequestParam; |
|
11 |
|
|
12 |
import com.google.common.collect.Lists; |
|
13 |
|
|
14 |
import eu.dnetlib.data.utility.cleaner.CleaningRule; |
|
15 |
import eu.dnetlib.data.utility.cleaner.CleaningRuleFactory; |
|
16 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
17 |
import eu.dnetlib.enabling.inspector.AbstractInspectorController; |
|
18 |
import eu.dnetlib.miscutils.collections.MappedCollection; |
|
19 |
import eu.dnetlib.miscutils.functional.UnaryFunction; |
|
20 |
|
|
21 |
@Controller |
|
22 |
public class CleanerInspector extends AbstractInspectorController { |
|
23 |
|
|
24 |
@Resource |
|
25 |
private CleaningRuleFactory cleaningRuleFactory; |
|
26 |
|
|
27 |
public static class SelectOption { |
|
28 |
|
|
29 |
private String value; |
|
30 |
private boolean selected; |
|
31 |
|
|
32 |
public SelectOption(final String value, final boolean selected) { |
|
33 |
super(); |
|
34 |
this.value = value; |
|
35 |
this.selected = selected; |
|
36 |
} |
|
37 |
|
|
38 |
public String getValue() { |
|
39 |
return value; |
|
40 |
} |
|
41 |
|
|
42 |
public void setValue(final String value) { |
|
43 |
this.value = value; |
|
44 |
} |
|
45 |
|
|
46 |
public boolean isSelected() { |
|
47 |
return selected; |
|
48 |
} |
|
49 |
|
|
50 |
public void setSelected(final boolean selected) { |
|
51 |
this.selected = selected; |
|
52 |
} |
|
53 |
} |
|
54 |
|
|
55 |
@RequestMapping(value = "/inspector/cleaner.do") |
|
56 |
public void cleaner(final Model model, |
|
57 |
@RequestParam(value = "rule", required = false) final String ruleId, |
|
58 |
@RequestParam(value = "dirtyText", required = false) final String dirtyText) throws CleanerException { |
|
59 |
|
|
60 |
List<String> rules = Lists.newArrayList(cleaningRuleFactory.getRuleIds()); |
|
61 |
model.addAttribute("rules", selectOptions(rules, ruleId)); |
|
62 |
|
|
63 |
if ((ruleId != null) && (dirtyText != null)) { |
|
64 |
CleaningRule rule = cleaningRuleFactory.obtainCleaningRule(ruleId); |
|
65 |
model.addAttribute("dirtyText", dirtyText); |
|
66 |
model.addAttribute("cleanedText", rule.evaluate(dirtyText)); |
|
67 |
} |
|
68 |
} |
|
69 |
|
|
70 |
/** |
|
71 |
* Given an list of values, return a list of SelectOption instances which have the "selected" boolean field set to true only for the |
|
72 |
* element matching "current". |
|
73 |
* |
|
74 |
* @param input |
|
75 |
* list of input strings |
|
76 |
* @param current |
|
77 |
* current value to select |
|
78 |
* @return |
|
79 |
*/ |
|
80 |
private List<SelectOption> selectOptions(final List<String> input, final String current) { |
|
81 |
final UnaryFunction<SelectOption, String> mapper = new UnaryFunction<SelectOption, String>() { |
|
82 |
|
|
83 |
@Override |
|
84 |
public SelectOption evaluate(final String value) { |
|
85 |
return new SelectOption(value, value.equals(current)); |
|
86 |
} |
|
87 |
}; |
|
88 |
return Lists.newArrayList(new MappedCollection<SelectOption, String>(input, mapper)); |
|
89 |
} |
|
90 |
|
|
91 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/CleaningRule.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import java.io.StringReader; |
|
4 |
import java.util.ArrayList; |
|
5 |
import java.util.List; |
|
6 |
import java.util.Map; |
|
7 |
|
|
8 |
import org.apache.commons.logging.Log; |
|
9 |
import org.apache.commons.logging.LogFactory; |
|
10 |
import org.dom4j.Document; |
|
11 |
import org.dom4j.Element; |
|
12 |
import org.dom4j.Namespace; |
|
13 |
import org.dom4j.QName; |
|
14 |
import org.dom4j.io.SAXReader; |
|
15 |
import org.springframework.beans.factory.annotation.Required; |
|
16 |
|
|
17 |
import eu.dnetlib.miscutils.functional.UnaryFunction; |
|
18 |
|
|
19 |
public class CleaningRule implements UnaryFunction<String, String> { |
|
20 |
|
|
21 |
private static final Log log = LogFactory.getLog(CleaningRule.class); // NOPMD by marko on 11/24/08 5:02 PM |
|
22 |
|
|
23 |
private List<XPATHCleaningRule> xpathRules = new ArrayList<XPATHCleaningRule>(); |
|
24 |
|
|
25 |
@Override |
|
26 |
public String evaluate(final String text) { |
|
27 |
|
|
28 |
try { |
|
29 |
final List<Map<String, String>> errors = new ArrayList<Map<String, String>>(); |
|
30 |
final Document doc = (new SAXReader()).read(new StringReader(text)); |
|
31 |
for (final XPATHCleaningRule r : xpathRules) { |
|
32 |
errors.addAll(r.applyXpathRule(doc)); |
|
33 |
} |
|
34 |
if (errors.size() > 0) { |
|
35 |
markAsInvalid(doc, errors); |
|
36 |
} |
|
37 |
return doc.asXML(); |
|
38 |
} catch (final Exception e) { |
|
39 |
log.error("Error evaluating rule", e); |
|
40 |
} |
|
41 |
return ""; |
|
42 |
} |
|
43 |
|
|
44 |
private void markAsInvalid(final Document doc, final List<Map<String, String>> errors) { |
|
45 |
final Element element = (Element) doc.selectSingleNode("//*[local-name()='header']"); |
|
46 |
if (element != null) { |
|
47 |
final Element inv = element.addElement(new QName("invalid", new Namespace("dri", "http://www.driver-repository.eu/namespace/dri"))); |
|
48 |
for (final Map<String, String> e : errors) { |
|
49 |
final Element err = inv.addElement(new QName("error", new Namespace("dri", "http://www.driver-repository.eu/namespace/dri"))); |
|
50 |
for (final Map.Entry<String, String> entry : e.entrySet()) { |
|
51 |
err.addAttribute(entry.getKey(), entry.getValue()); |
|
52 |
} |
|
53 |
} |
|
54 |
inv.addAttribute("value", "true"); |
|
55 |
} |
|
56 |
} |
|
57 |
|
|
58 |
public List<XPATHCleaningRule> getXpathRules() { |
|
59 |
return xpathRules; |
|
60 |
} |
|
61 |
|
|
62 |
@Required |
|
63 |
public void setXpathRules(final List<XPATHCleaningRule> xpathRules) { |
|
64 |
this.xpathRules = xpathRules; |
|
65 |
} |
|
66 |
|
|
67 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/CleanerServiceImpl.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import javax.xml.ws.wsaddressing.W3CEndpointReference; |
|
4 |
|
|
5 |
import org.springframework.beans.factory.annotation.Required; |
|
6 |
|
|
7 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
8 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerService; |
|
9 |
import eu.dnetlib.enabling.resultset.MappedResultSetFactory; |
|
10 |
import eu.dnetlib.enabling.tools.AbstractBaseService; |
|
11 |
|
|
12 |
public class CleanerServiceImpl extends AbstractBaseService implements CleanerService { |
|
13 |
|
|
14 |
private CleaningRuleFactory cleaningRuleFactory; |
|
15 |
|
|
16 |
private MappedResultSetFactory mappedResultSetFactory; |
|
17 |
|
|
18 |
@Override |
|
19 |
public W3CEndpointReference clean(final W3CEndpointReference epr, final String ruleId) throws CleanerException { |
|
20 |
if ((ruleId == null) || (ruleId.isEmpty())) { throw new CleanerException("Invalid ruleId: id is empty"); } |
|
21 |
if (epr == null) { throw new CleanerException("Passed epr is empty"); } |
|
22 |
|
|
23 |
return mappedResultSetFactory.createMappedResultSet(epr, cleaningRuleFactory.obtainCleaningRule(ruleId)); |
|
24 |
} |
|
25 |
|
|
26 |
@Required |
|
27 |
public MappedResultSetFactory getMappedResultSetFactory() { |
|
28 |
return mappedResultSetFactory; |
|
29 |
} |
|
30 |
|
|
31 |
@Required |
|
32 |
public void setMappedResultSetFactory(final MappedResultSetFactory mappedResultSetFactory) { |
|
33 |
this.mappedResultSetFactory = mappedResultSetFactory; |
|
34 |
} |
|
35 |
|
|
36 |
public CleaningRuleFactory getCleaningRuleFactory() { |
|
37 |
return cleaningRuleFactory; |
|
38 |
} |
|
39 |
|
|
40 |
@Required |
|
41 |
public void setCleaningRuleFactory(final CleaningRuleFactory cleaningRuleFactory) { |
|
42 |
this.cleaningRuleFactory = cleaningRuleFactory; |
|
43 |
} |
|
44 |
|
|
45 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/GroovyRule.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
4 |
import groovy.lang.Closure; |
|
5 |
import groovy.lang.GroovyShell; |
|
6 |
|
|
7 |
import java.util.Map; |
|
8 |
|
|
9 |
import org.apache.commons.logging.Log; |
|
10 |
import org.apache.commons.logging.LogFactory; |
|
11 |
|
|
12 |
/** |
|
13 |
* @author michele |
|
14 |
* |
|
15 |
* Groovy rules must be declared in a CleanerDS profile, some examples: |
|
16 |
* |
|
17 |
* <RULE xpath="..." groovy="(input =~ /X/).replaceAll('Y')" /> <RULE xpath="..." groovy="'CONSTANT'" /> <RULE xpath="..." |
|
18 |
* groovy="input.toUpperCase()" /> |
|
19 |
*/ |
|
20 |
|
|
21 |
public class GroovyRule extends XPATHCleaningRule { |
|
22 |
|
|
23 |
private static final Log log = LogFactory.getLog(GroovyRule.class); // NOPMD by marko on 11/24/08 5:02 PM |
|
24 |
|
|
25 |
private String groovyRule; |
|
26 |
private Closure<String> closure; |
|
27 |
|
|
28 |
private GroovyShell groovyShell = new GroovyShell(); |
|
29 |
|
|
30 |
@SuppressWarnings("unchecked") |
|
31 |
public GroovyRule(final String groovyRule) { |
|
32 |
this.groovyRule = groovyRule; |
|
33 |
this.closure = (Closure<String>) groovyShell.evaluate("{ input -> " + groovyRule + "}"); |
|
34 |
} |
|
35 |
|
|
36 |
@Override |
|
37 |
protected String calculateNewValue(final String oldValue) throws CleanerException { |
|
38 |
try { |
|
39 |
log.info("Executing groovy closure on value " + oldValue); |
|
40 |
return closure.call(oldValue); |
|
41 |
} catch (Exception e) { |
|
42 |
log.error("Failed Groovy execution, groovyRule: " + groovyRule + ", input: " + oldValue, e); |
|
43 |
throw new CleanerException("Error executing groovy", e); |
|
44 |
} |
|
45 |
} |
|
46 |
|
|
47 |
@Override |
|
48 |
protected Map<String, String> verifyValue(final String value) throws CleanerException { |
|
49 |
return null; |
|
50 |
} |
|
51 |
|
|
52 |
@Override |
|
53 |
public String toString() { |
|
54 |
return "GROOVY: " + groovyRule; |
|
55 |
} |
|
56 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/java/eu/dnetlib/data/utility/cleaner/XPATHCleaningRule.java | ||
---|---|---|
1 |
package eu.dnetlib.data.utility.cleaner; |
|
2 |
|
|
3 |
import java.util.List; |
|
4 |
import java.util.Map; |
|
5 |
|
|
6 |
import org.apache.commons.logging.Log; |
|
7 |
import org.apache.commons.logging.LogFactory; |
|
8 |
import org.dom4j.Document; |
|
9 |
import org.dom4j.Node; |
|
10 |
import org.springframework.beans.factory.annotation.Required; |
|
11 |
|
|
12 |
import com.google.common.collect.Lists; |
|
13 |
|
|
14 |
import eu.dnetlib.data.utility.cleaner.rmi.CleanerException; |
|
15 |
|
|
16 |
public abstract class XPATHCleaningRule { |
|
17 |
|
|
18 |
private String xpath; |
|
19 |
private boolean strict = false; |
|
20 |
|
|
21 |
private static final Log logCleaningRules = LogFactory.getLog("VOCABULARY_RULES"); |
|
22 |
|
|
23 |
public List<Map<String, String>> applyXpathRule(final Document doc) throws CleanerException { |
|
24 |
final List<Map<String, String>> errors = Lists.newArrayList(); |
|
25 |
|
|
26 |
final String id = doc.valueOf("//*[local-name()='objIdentifier']"); |
|
27 |
|
|
28 |
for (Object o : doc.selectNodes(xpath)) { |
|
29 |
final Node node = (Node) o; |
|
30 |
|
|
31 |
final String oldValue = node.getText().trim(); |
|
32 |
|
|
33 |
final String newValue = calculateNewValue(oldValue); |
|
34 |
if (strict) { |
|
35 |
final Map<String, String> err = verifyValue(newValue); |
|
36 |
if (err != null) { |
|
37 |
errors.add(err); |
|
38 |
|
|
39 |
if (logCleaningRules.isInfoEnabled()) { |
|
40 |
logCleaningRules.info("[" + newValue + "] is INVALID, " + "RULE: " + toString() + ", " + "RECORD: " + id + ", " + "XPATH: " |
|
41 |
+ this.getXpath()); |
|
42 |
} |
|
43 |
} |
|
44 |
} |
|
45 |
|
|
46 |
if (logCleaningRules.isInfoEnabled() && !newValue.equals(oldValue)) { |
|
47 |
logCleaningRules.info("[" + oldValue + "] => [" + newValue + "], " + toString() + ", " + "RECORD: " + id + ", " + "XPATH: " + this.getXpath()); |
|
48 |
} |
|
49 |
|
|
50 |
node.setText(newValue); |
|
51 |
} |
|
52 |
|
|
53 |
return errors; |
|
54 |
} |
|
55 |
|
|
56 |
protected abstract Map<String, String> verifyValue(final String value) throws CleanerException; |
|
57 |
|
|
58 |
protected abstract String calculateNewValue(final String oldValue) throws CleanerException; |
|
59 |
|
|
60 |
public String getXpath() { |
|
61 |
return xpath; |
|
62 |
} |
|
63 |
|
|
64 |
@Required |
|
65 |
public void setXpath(final String xpath) { |
|
66 |
this.xpath = xpath; |
|
67 |
} |
|
68 |
|
|
69 |
public boolean isStrict() { |
|
70 |
return strict; |
|
71 |
} |
|
72 |
|
|
73 |
public void setStrict(final boolean strict) { |
|
74 |
this.strict = strict; |
|
75 |
} |
|
76 |
|
|
77 |
} |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/resources/eu/dnetlib/enabling/views/inspector/cleaner.st | ||
---|---|---|
1 |
$inspector/master(it={ |
|
2 |
|
|
3 |
<style type="text/css"> |
|
4 |
#results { |
|
5 |
width: 100%; |
|
6 |
} |
|
7 |
|
|
8 |
#results td:first-child { |
|
9 |
width: 2em; |
|
10 |
} |
|
11 |
|
|
12 |
#results td { |
|
13 |
border: 1px solid #cecece; |
|
14 |
} |
|
15 |
</style> |
|
16 |
|
|
17 |
<h2>Browse indices</h2> |
|
18 |
|
|
19 |
<form method="POST"> |
|
20 |
Cleaner rules: |
|
21 |
<select name="rule"> |
|
22 |
$rules:{<option $if(it.selected)$selected$endif$>$it.value$</option>}$ |
|
23 |
</select><br /><br /> |
|
24 |
|
|
25 |
Dirty Record:<br /> |
|
26 |
<textarea name="dirtyText" cols="80" rows="10">$dirtyText$</textarea> |
|
27 |
<br /><br /> |
|
28 |
<input type="submit" value="submit"/> |
|
29 |
</form> |
|
30 |
<br /> |
|
31 |
|
|
32 |
Cleaned Record:<br /> |
|
33 |
<textarea readonly="readonly" cols="80" rows="10">$cleanedText$</textarea> |
|
34 |
|
|
35 |
|
|
36 |
})$ |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/resources/eu/dnetlib/data/utility/cleaner/inspector/webContext-cleaner-inspector.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<beans xmlns="http://www.springframework.org/schema/beans" |
|
3 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|
4 |
xmlns:p="http://www.springframework.org/schema/p" |
|
5 |
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> |
|
6 |
|
|
7 |
<bean id="cleanerInspectorGroup" |
|
8 |
class="eu.dnetlib.enabling.inspector.StaticEntryPointDescriptorGroup" |
|
9 |
p:name="cleaner"> |
|
10 |
<property name="descriptors"> |
|
11 |
<list> |
|
12 |
<bean class="eu.dnetlib.enabling.inspector.StaticEntryPointDescriptor" |
|
13 |
p:name="cleaner" p:relativeUrl="cleaner.do" |
|
14 |
p:hiddenAsDefault="true"/> |
|
15 |
</list> |
|
16 |
</property> |
|
17 |
</bean> |
|
18 |
|
|
19 |
</beans> |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/resources/eu/dnetlib/data/utility/cleaner/applicationContext-cleaner.properties | ||
---|---|---|
1 |
service.cleaner.mapped.resultset.factory=mappedResultSetFactory |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/src/main/resources/eu/dnetlib/data/utility/cleaner/applicationContext-cleaner.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<beans xmlns="http://www.springframework.org/schema/beans" |
|
3 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" |
|
4 |
xmlns:sec="http://cxf.apache.org/configuration/security" xmlns:wsa="http://cxf.apache.org/ws/addressing" |
|
5 |
xmlns:p="http://www.springframework.org/schema/p" xmlns:http="http://cxf.apache.org/transports/http/configuration" |
|
6 |
xmlns:t="http://dnetlib.eu/springbeans/t" xmlns:template="http://dnetlib.eu/springbeans/template" |
|
7 |
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd |
|
8 |
http://cxf.apache.org/ws/addressing http://cxf.apache.org/schemas/ws-addr-conf.xsd |
|
9 |
http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd |
|
10 |
http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd |
|
11 |
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd |
|
12 |
http://dnetlib.eu/springbeans/template http://dnetlib.eu/springbeans/template.xsd"> |
|
13 |
|
|
14 |
<!-- beans --> |
|
15 |
<bean id="cleanerService" |
|
16 |
class="eu.dnetlib.data.utility.cleaner.CleanerServiceImpl" |
|
17 |
init-method="start" destroy-method="stop" p:cleaningRuleFactory-ref="cleaningRuleFactory" |
|
18 |
p:mappedResultSetFactory-ref="${service.cleaner.mapped.resultset.factory}" /> |
|
19 |
|
|
20 |
<bean id="cleaningRuleFactory" |
|
21 |
class="eu.dnetlib.data.utility.cleaner.CleaningRuleFactory" |
|
22 |
p:serviceLocator-ref="uniqueServiceLocator"> |
|
23 |
</bean> |
|
24 |
|
|
25 |
<!-- endpoints --> |
|
26 |
<jaxws:endpoint id="cleanerServiceEndpoint" implementor="#cleanerService" |
|
27 |
implementorClass="eu.dnetlib.data.utility.cleaner.rmi.CleanerService" |
|
28 |
address="/cleaner" /> |
|
29 |
|
|
30 |
<template:instance name="serviceRegistrationManager" |
|
31 |
t:serviceRegistrationManagerClass="eu.dnetlib.enabling.tools.registration.ValidatingServiceRegistrationManagerImpl" |
|
32 |
t:name="cleanerServiceRegistrationManager" t:service="cleanerService" |
|
33 |
t:endpoint="cleanerServiceEndpoint" t:jobScheduler="jobScheduler" |
|
34 |
t:serviceRegistrator="blackboardServiceRegistrator" /> |
|
35 |
|
|
36 |
</beans> |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/.springBeans | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<beansProjectDescription> |
|
3 |
<version>1</version> |
|
4 |
<pluginVersion><![CDATA[2.2.8.200911091054-RELEASE]]></pluginVersion> |
|
5 |
<configSuffixes> |
|
6 |
<configSuffix><![CDATA[xml]]></configSuffix> |
|
7 |
</configSuffixes> |
|
8 |
<enableImports><![CDATA[false]]></enableImports> |
|
9 |
<configs> |
|
10 |
<config>src/main/eu/dnetlib/data/utility/cleaner/applicationContext-cleaner.xml</config> |
|
11 |
</configs> |
|
12 |
<configSets> |
|
13 |
</configSets> |
|
14 |
</beansProjectDescription> |
modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0/pom.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> |
|
3 |
<parent> |
|
4 |
<groupId>eu.dnetlib</groupId> |
|
5 |
<artifactId>dnet-parent</artifactId> |
|
6 |
<version>1.0.0</version> |
|
7 |
</parent> |
|
8 |
<modelVersion>4.0.0</modelVersion> |
|
9 |
<groupId>eu.dnetlib</groupId> |
|
10 |
<artifactId>cnr-data-utility-cleaner-service</artifactId> |
|
11 |
<packaging>jar</packaging> |
|
12 |
<version>3.0.0</version> |
|
13 |
<scm> |
|
14 |
<developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet40/modules/cnr-data-utility-cleaner-service/tags/cnr-data-utility-cleaner-service-3.0.0</developerConnection> |
|
15 |
</scm> |
|
16 |
<dependencies> |
|
17 |
<dependency> |
|
18 |
<groupId>org.mockito</groupId> |
|
19 |
<artifactId>mockito-core</artifactId> |
|
20 |
<version>1.6</version> |
|
21 |
<scope>test</scope> |
|
22 |
</dependency> |
|
23 |
<dependency> |
|
24 |
<groupId>eu.dnetlib</groupId> |
|
25 |
<artifactId>cnr-test-utils</artifactId> |
|
26 |
<version>[1.0.0,2.0.0)</version> |
|
27 |
<scope>test</scope> |
|
28 |
</dependency> |
|
29 |
<dependency> |
|
30 |
<groupId>eu.dnetlib</groupId> |
|
31 |
<artifactId>cnr-rmi-api</artifactId> |
|
32 |
<version>[2.0.0,3.0.0)</version> |
|
33 |
</dependency> |
|
34 |
<dependency> |
|
35 |
<groupId>eu.dnetlib</groupId> |
|
36 |
<artifactId>cnr-service-common</artifactId> |
|
37 |
<version>[2.1.2,3.0.0)</version> |
|
38 |
</dependency> |
|
39 |
<dependency> |
|
40 |
<groupId>eu.dnetlib</groupId> |
|
41 |
<artifactId>cnr-resultset-service</artifactId> |
|
42 |
<version>[2.0.0,3.0.0)</version> |
|
43 |
</dependency> |
|
44 |
<dependency> |
|
45 |
<groupId>com.google.guava</groupId> |
|
46 |
<artifactId>guava</artifactId> |
|
47 |
<version>${google.guava.version}</version> |
|
48 |
</dependency> |
|
49 |
<dependency> |
|
50 |
<groupId>org.codehaus.groovy</groupId> |
|
51 |
<artifactId>groovy-all</artifactId> |
|
52 |
<version>2.1.6</version> |
|
53 |
</dependency> |
|
54 |
<dependency> |
|
55 |
<groupId>eu.dnetlib</groupId> |
|
56 |
<artifactId>cnr-inspector</artifactId> |
|
57 |
<version>[1.0.0,2.0.0)</version> |
|
58 |
</dependency> |
|
59 |
<dependency> |
|
60 |
<groupId>eu.dnetlib</groupId> |
|
61 |
<artifactId>cnr-data-utility-cleaner-rmi</artifactId> |
|
62 |
<version>[2.0.0,3.0.0)</version> |
|
63 |
</dependency> |
|
64 |
<dependency> |
|
65 |
<groupId>junit</groupId> |
|
66 |
<artifactId>junit</artifactId> |
|
67 |
<version>${junit.version}</version> |
|
68 |
<scope>test</scope> |
|
69 |
</dependency> |
|
70 |
</dependencies> |
|
71 |
</project> |
Also available in: Unified diff
[maven-release-plugin] copy for tag cnr-data-utility-cleaner-service-3.0.0