Skip to content

Commit 615fb08

Browse files
authored
IMessageCheck now returns an IMessageCheckResult instead of a boolean (#41)
* IMessageCheck now returns an IMessageCheckResult instead of a boolean * Added more detail to IMessageCheckResult The introduction of IMessageCheckResult is not ideal since it is very like the ValidationFailureEvent, but in the light of #37 I still think that this is ok. * Reformatted the modified files Formatted with the "Eclipse [Build-in]" profile
1 parent e4a7743 commit 615fb08

15 files changed

Lines changed: 390 additions & 192 deletions

org.eclipse.babel.core/src/org/eclipse/babel/core/message/checks/IMessageCheck.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
******************************************************************************/
1111
package org.eclipse.babel.core.message.checks;
1212

13+
import java.util.Locale;
14+
1315
import org.eclipse.babel.core.message.IMessage;
1416
import org.eclipse.babel.core.message.IMessagesBundleGroup;
1517
import org.eclipse.babel.core.message.internal.Message;
@@ -24,14 +26,17 @@
2426
*/
2527
public interface IMessageCheck {
2628

27-
/**
28-
* Checks whether a {@link Message} meets the implemented condition.
29-
*
30-
* @param messagesBundleGroup
31-
* messages bundle group
32-
* @param message
33-
* the message being tested
34-
* @return <code>true</code> if condition is successfully tested
35-
*/
36-
boolean checkKey(IMessagesBundleGroup messagesBundleGroup, IMessage message);
29+
/**
30+
* Checks whether a {@link Message} meets the implemented condition.
31+
*
32+
* @param messagesBundleGroup messages bundle group
33+
* @param key key being tested
34+
* @param locale the locale being tested
35+
* @param message the message being tested
36+
*
37+
* @return <code>MessageCheckResult.OK</code> if condition is successfully
38+
* tested
39+
*/
40+
IMessageCheckResult checkKey(IMessagesBundleGroup messagesBundleGroup, String key, Locale locale, IMessage message);
41+
3742
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package org.eclipse.babel.core.message.checks;
2+
3+
import java.util.Locale;
4+
5+
import org.eclipse.babel.core.message.IMessage;
6+
7+
/**
8+
* A result of a test performed by IMessageCheck
9+
*/
10+
public interface IMessageCheckResult {
11+
/**
12+
* Textual presentation of the check result. Used in UI
13+
*/
14+
String getText();
15+
16+
/**
17+
* The key that was tested by IMessageCheck
18+
*/
19+
String getKey();
20+
21+
/**
22+
* The locale that was tested by IMessageCheck
23+
*/
24+
Locale getLocale();
25+
26+
/**
27+
* The IMessage that was tested, this value can be null
28+
*/
29+
IMessage getMessage();
30+
31+
/**
32+
* The IMessageCheck that was used when testing
33+
*/
34+
IMessageCheck getMessageCheck();
35+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.eclipse.babel.core.message.checks;
2+
3+
import java.util.Locale;
4+
5+
import org.eclipse.babel.core.message.IMessage;
6+
7+
public class MessageCheckResult implements IMessageCheckResult {
8+
9+
public static final IMessageCheckResult OK = new MessageCheckResult("", null, null, null, null); //$NON-NLS-1$
10+
11+
private String text;
12+
private IMessageCheck messageCheck;
13+
14+
private String key;
15+
16+
private Locale locale;
17+
18+
private IMessage message;
19+
20+
public MessageCheckResult(String text, String key, Locale locale, IMessage message, IMessageCheck messageCheck) {
21+
this.text = text;
22+
this.key = key;
23+
this.locale = locale;
24+
this.message = message;
25+
this.messageCheck = messageCheck;
26+
}
27+
28+
@Override
29+
public String getText() {
30+
return this.text;
31+
}
32+
33+
@Override
34+
public IMessageCheck getMessageCheck() {
35+
return this.messageCheck;
36+
}
37+
38+
@Override
39+
public String getKey() {
40+
return this.key;
41+
}
42+
43+
@Override
44+
public Locale getLocale() {
45+
return this.locale;
46+
}
47+
48+
@Override
49+
public IMessage getMessage() {
50+
return this.message;
51+
}
52+
}

org.eclipse.babel.core/src/org/eclipse/babel/core/message/checks/internal/DuplicateValueCheck.java

Lines changed: 34 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212

1313
import java.util.ArrayList;
1414
import java.util.Collection;
15+
import java.util.Locale;
1516

1617
import org.eclipse.babel.core.message.IMessage;
1718
import org.eclipse.babel.core.message.IMessagesBundle;
1819
import org.eclipse.babel.core.message.IMessagesBundleGroup;
1920
import org.eclipse.babel.core.message.checks.IMessageCheck;
21+
import org.eclipse.babel.core.message.checks.IMessageCheckResult;
22+
import org.eclipse.babel.core.message.checks.MessageCheckResult;
2023
import org.eclipse.babel.core.util.BabelUtils;
2124

2225
/**
@@ -26,46 +29,35 @@
2629
*/
2730
public class DuplicateValueCheck implements IMessageCheck {
2831

29-
private String[] duplicateKeys;
30-
31-
/**
32-
* Constructor.
33-
*/
34-
public DuplicateValueCheck() {
35-
super();
36-
}
37-
38-
/**
39-
* Resets the collected keys to null.
40-
*/
41-
public void reset() {
42-
duplicateKeys = null;
43-
}
44-
45-
public boolean checkKey(IMessagesBundleGroup messagesBundleGroup,
46-
IMessage message) {
47-
Collection<String> keys = new ArrayList<String>();
48-
if (message != null) {
49-
IMessagesBundle messagesBundle = messagesBundleGroup
50-
.getMessagesBundle(message.getLocale());
51-
for (IMessage duplicateEntry : messagesBundle.getMessages()) {
52-
if (!message.getKey().equals(duplicateEntry.getKey())
53-
&& BabelUtils.equals(message.getValue(),
54-
duplicateEntry.getValue())) {
55-
keys.add(duplicateEntry.getKey());
56-
}
57-
}
58-
if (!keys.isEmpty()) {
59-
keys.add(message.getKey());
60-
}
61-
}
62-
63-
duplicateKeys = keys.toArray(new String[] {});
64-
return !keys.isEmpty();
65-
}
66-
67-
public String[] getDuplicateKeys() {
68-
return duplicateKeys;
69-
}
70-
32+
public static final DuplicateValueCheck INSTANCE = new DuplicateValueCheck();
33+
34+
/**
35+
* Constructor.
36+
*/
37+
private DuplicateValueCheck() {
38+
super();
39+
}
40+
41+
public IMessageCheckResult checkKey(IMessagesBundleGroup messagesBundleGroup, String key, Locale locale,
42+
IMessage message) {
43+
Collection<String> keys = new ArrayList<>();
44+
if (message != null) {
45+
IMessagesBundle messagesBundle = messagesBundleGroup.getMessagesBundle(message.getLocale());
46+
for (IMessage duplicateEntry : messagesBundle.getMessages()) {
47+
if (!message.getKey().equals(duplicateEntry.getKey())
48+
&& BabelUtils.equals(message.getValue(), duplicateEntry.getValue())) {
49+
keys.add(duplicateEntry.getKey());
50+
}
51+
}
52+
if (!keys.isEmpty()) {
53+
keys.add(message.getKey());
54+
}
55+
}
56+
57+
if (keys.isEmpty()) {
58+
return MessageCheckResult.OK;
59+
} else {
60+
return new DuplicateValueMessageCheckResult(keys.toArray(String[]::new), key, locale, message, this);
61+
}
62+
}
7163
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.eclipse.babel.core.message.checks.internal;
2+
3+
import java.text.MessageFormat;
4+
import java.util.Locale;
5+
6+
import org.eclipse.babel.core.message.IMessage;
7+
import org.eclipse.babel.core.message.checks.IMessageCheck;
8+
import org.eclipse.babel.core.message.checks.MessageCheckResult;
9+
10+
public class DuplicateValueMessageCheckResult extends MessageCheckResult {
11+
12+
private String[] duplicateKeys;
13+
14+
public DuplicateValueMessageCheckResult(String[] duplicateKeys, String key, Locale locale, IMessage message,
15+
IMessageCheck messageCheck) {
16+
super("", key, locale, message, messageCheck);
17+
this.duplicateKeys = duplicateKeys;
18+
}
19+
20+
public String[] getDuplicateKeys() {
21+
return this.duplicateKeys;
22+
}
23+
24+
@Override
25+
public String getText() {
26+
String introduction = MessageFormat.format("The key \"{0}\" has the same value as the following key(s):\n",
27+
this.getKey());
28+
29+
StringBuilder buf = new StringBuilder(introduction);
30+
31+
if (this.duplicateKeys != null) { // keys = duplicated values
32+
for (String duplKey : this.duplicateKeys) {
33+
buf.append("\t- ");
34+
buf.append(duplKey);
35+
buf.append("\n");
36+
}
37+
}
38+
39+
return buf.toString();
40+
}
41+
42+
}

org.eclipse.babel.core/src/org/eclipse/babel/core/message/checks/internal/MissingValueCheck.java

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,13 @@
1010
******************************************************************************/
1111
package org.eclipse.babel.core.message.checks.internal;
1212

13+
import java.util.Locale;
14+
1315
import org.eclipse.babel.core.message.IMessage;
1416
import org.eclipse.babel.core.message.IMessagesBundleGroup;
1517
import org.eclipse.babel.core.message.checks.IMessageCheck;
18+
import org.eclipse.babel.core.message.checks.IMessageCheckResult;
19+
import org.eclipse.babel.core.message.checks.MessageCheckResult;
1620

1721
/**
1822
* Visitor for finding if a key has at least one corresponding bundle entry with
@@ -22,26 +26,26 @@
2226
*/
2327
public class MissingValueCheck implements IMessageCheck {
2428

25-
/** The singleton */
26-
public static MissingValueCheck MISSING_KEY = new MissingValueCheck();
29+
/** The singleton */
30+
public static final MissingValueCheck INSTANCE = new MissingValueCheck();
31+
32+
/**
33+
* Constructor.
34+
*/
35+
private MissingValueCheck() {
36+
super();
37+
}
2738

28-
/**
29-
* Constructor.
30-
*/
31-
private MissingValueCheck() {
32-
super();
33-
}
39+
/**
40+
* @see org.eclipse.babel.core.message.internal.checks.IMessageCheck#checkKey(org.eclipse.babel.core.message.internal.MessagesBundleGroup,
41+
* String, Locale, org.eclipse.babel.core.message.internal.Message)
42+
*/
43+
public IMessageCheckResult checkKey(IMessagesBundleGroup messagesBundleGroup, String key, Locale locale,
44+
IMessage message) {
45+
if (message == null || message.getValue() == null || message.getValue().length() == 0) {
46+
return new MissingValueCheckResult(key, locale, message, this);
47+
}
48+
return MessageCheckResult.OK;
49+
}
3450

35-
/**
36-
* @see org.eclipse.babel.core.message.internal.checks.IMessageCheck#checkKey(org.eclipse.babel.core.message.internal.MessagesBundleGroup,
37-
* org.eclipse.babel.core.message.internal.Message)
38-
*/
39-
public boolean checkKey(IMessagesBundleGroup messagesBundleGroup,
40-
IMessage message) {
41-
if (message == null || message.getValue() == null
42-
|| message.getValue().length() == 0) {
43-
return true;
44-
}
45-
return false;
46-
}
4751
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.eclipse.babel.core.message.checks.internal;
2+
3+
import java.text.MessageFormat;
4+
import java.util.Locale;
5+
6+
import org.eclipse.babel.core.message.IMessage;
7+
import org.eclipse.babel.core.message.checks.IMessageCheck;
8+
import org.eclipse.babel.core.message.checks.MessageCheckResult;
9+
10+
public class MissingValueCheckResult extends MessageCheckResult {
11+
12+
public MissingValueCheckResult(String key, Locale locale, IMessage message, IMessageCheck messageCheck) {
13+
super("", key, locale, message, messageCheck);
14+
}
15+
16+
@Override
17+
public String getText() {
18+
return MessageFormat.format("The key \"{0}\" missing a value", this.getKey());
19+
}
20+
}

0 commit comments

Comments
 (0)