Skip to content

Commit 7a462df

Browse files
committed
Move ObjectPath, XContentSoure and XContentUtils to core
1 parent 18e004c commit 7a462df

File tree

46 files changed

+142
-97
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+142
-97
lines changed
Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,43 @@
11
/*
2-
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3-
* or more contributor license agreements. Licensed under the Elastic License;
4-
* you may not use this file except in compliance with the Elastic License.
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
518
*/
6-
package org.elasticsearch.xpack.core.watcher.support.xcontent;
19+
package org.elasticsearch.common.xcontent;
720

821
import org.elasticsearch.common.Strings;
922

1023
import java.lang.reflect.Array;
1124
import java.util.List;
1225
import java.util.Map;
1326

14-
public class ObjectPath {
27+
/**
28+
* Helper class for navigating arbitrary nested maps and lists using dot
29+
* notation
30+
*/
31+
public final class ObjectPath {
1532

1633
private ObjectPath() {
1734
}
1835

36+
/**
37+
* Extracts the value at a dot notation location in the given object
38+
* @return {@code null} if the location does not exist, otherwise the relevant value
39+
*/
40+
@SuppressWarnings("unchecked")
1941
public static <T> T eval(String path, Object object) {
2042
return (T) evalContext(path, object);
2143
}
@@ -24,36 +46,23 @@ private static Object evalContext(String path, Object ctx) {
2446
final String[] parts;
2547
if (path == null || path.isEmpty()) parts = Strings.EMPTY_ARRAY;
2648
else parts = path.split("\\.");
27-
StringBuilder resolved = new StringBuilder();
2849
for (String part : parts) {
2950
if (ctx == null) {
3051
return null;
3152
}
3253
if (ctx instanceof Map) {
3354
ctx = ((Map) ctx).get(part);
34-
if (resolved.length() != 0) {
35-
resolved.append(".");
36-
}
37-
resolved.append(part);
3855
} else if (ctx instanceof List) {
3956
try {
4057
int index = Integer.parseInt(part);
4158
ctx = ((List) ctx).get(index);
42-
if (resolved.length() != 0) {
43-
resolved.append(".");
44-
}
45-
resolved.append(part);
4659
} catch (NumberFormatException nfe) {
4760
return null;
4861
}
4962
} else if (ctx.getClass().isArray()) {
5063
try {
5164
int index = Integer.parseInt(part);
5265
ctx = Array.get(ctx, index);
53-
if (resolved.length() != 0) {
54-
resolved.append(".");
55-
}
56-
resolved.append(part);
5766
} catch (NumberFormatException nfe) {
5867
return null;
5968
}
Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,36 @@
11
/*
2-
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3-
* or more contributor license agreements. Licensed under the Elastic License;
4-
* you may not use this file except in compliance with the Elastic License.
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
518
*/
6-
package org.elasticsearch.xpack.core.watcher.support.xcontent;
19+
package org.elasticsearch.common.xcontent;
720

821
import org.elasticsearch.ElasticsearchException;
922
import org.elasticsearch.ElasticsearchParseException;
1023
import org.elasticsearch.common.bytes.BytesReference;
1124
import org.elasticsearch.common.io.stream.StreamInput;
1225
import org.elasticsearch.common.io.stream.StreamOutput;
13-
import org.elasticsearch.common.xcontent.LoggingDeprecationHandler;
14-
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
15-
import org.elasticsearch.common.xcontent.ToXContent;
16-
import org.elasticsearch.common.xcontent.XContentBuilder;
17-
import org.elasticsearch.common.xcontent.XContentParser;
18-
import org.elasticsearch.common.xcontent.XContentType;
19-
import org.elasticsearch.xpack.core.watcher.common.xcontent.XContentUtils;
2026

2127
import java.io.IOException;
2228
import java.io.InputStream;
2329
import java.util.List;
2430
import java.util.Map;
2531

2632
/**
27-
* Encapsulates the xcontent source
33+
* Encapsulates arbitrary XContent source
2834
*/
2935
public class XContentSource implements ToXContent {
3036

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,30 @@
11
/*
2-
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3-
* or more contributor license agreements. Licensed under the Elastic License;
4-
* you may not use this file except in compliance with the Elastic License.
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
518
*/
6-
package org.elasticsearch.xpack.core.watcher.common.xcontent;
7-
8-
import org.elasticsearch.common.xcontent.XContentParser;
19+
package org.elasticsearch.common.xcontent;
920

1021
import java.io.IOException;
1122

12-
public class XContentUtils {
23+
public final class XContentUtils {
1324

1425
private XContentUtils() {
1526
}
1627

17-
// TODO open this up in core
1828
public static Object readValue(XContentParser parser, XContentParser.Token token) throws IOException {
1929
if (token == XContentParser.Token.VALUE_NULL) {
2030
return null;
Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,24 @@
11
/*
2-
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3-
* or more contributor license agreements. Licensed under the Elastic License;
4-
* you may not use this file except in compliance with the Elastic License.
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
518
*/
6-
package org.elasticsearch.xpack.watcher.support.xcontent;
19+
package org.elasticsearch.common.xcontent;
720

821
import org.elasticsearch.test.ESTestCase;
9-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
1022

1123
import java.util.ArrayList;
1224
import java.util.Arrays;
Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
/*
2-
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3-
* or more contributor license agreements. Licensed under the Elastic License;
4-
* you may not use this file except in compliance with the Elastic License.
2+
* Licensed to Elasticsearch under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
518
*/
6-
package org.elasticsearch.xpack.watcher.support.xcontent;
7-
19+
package org.elasticsearch.common.xcontent;
820

921
import org.elasticsearch.common.bytes.BytesReference;
10-
import org.elasticsearch.common.xcontent.ToXContent;
11-
import org.elasticsearch.common.xcontent.XContentBuilder;
12-
import org.elasticsearch.common.xcontent.XContentFactory;
1322
import org.elasticsearch.test.ESTestCase;
14-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
1523

1624
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
1725
import static org.elasticsearch.common.xcontent.XContentFactory.smileBuilder;

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/security/authc/support/mapper/expressiondsl/ExpressionParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.elasticsearch.common.io.stream.StreamOutput;
1313
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
1414
import org.elasticsearch.common.xcontent.XContentParser;
15-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
15+
import org.elasticsearch.common.xcontent.XContentSource;
1616

1717
import java.io.IOException;
1818
import java.io.InputStream;

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/watcher/client/WatchSourceBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.elasticsearch.xpack.core.watcher.input.none.NoneInput;
2323
import org.elasticsearch.xpack.core.watcher.support.Exceptions;
2424
import org.elasticsearch.xpack.core.watcher.support.xcontent.WatcherParams;
25-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
25+
import org.elasticsearch.common.xcontent.XContentSource;
2626
import org.elasticsearch.xpack.core.watcher.transform.Transform;
2727
import org.elasticsearch.xpack.core.watcher.trigger.Trigger;
2828
import org.elasticsearch.xpack.core.watcher.watch.WatchField;

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/watcher/transport/actions/execute/ExecuteWatchResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import org.elasticsearch.common.io.stream.StreamInput;
1111
import org.elasticsearch.common.io.stream.StreamOutput;
1212
import org.elasticsearch.common.xcontent.XContentType;
13-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
13+
import org.elasticsearch.common.xcontent.XContentSource;
1414

1515
import java.io.IOException;
1616

x-pack/plugin/core/src/main/java/org/elasticsearch/xpack/core/watcher/transport/actions/get/GetWatchResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.elasticsearch.common.io.stream.StreamOutput;
1212
import org.elasticsearch.common.lucene.uid.Versions;
1313
import org.elasticsearch.common.xcontent.XContentType;
14-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
14+
import org.elasticsearch.common.xcontent.XContentSource;
1515
import org.elasticsearch.xpack.core.watcher.watch.WatchStatus;
1616

1717
import java.io.IOException;

x-pack/plugin/core/src/test/java/org/elasticsearch/xpack/core/security/authc/support/mapper/expressiondsl/ExpressionParserTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.elasticsearch.test.ESTestCase;
1919
import org.elasticsearch.xpack.core.XPackClientPlugin;
2020
import org.elasticsearch.xpack.core.security.authc.support.mapper.expressiondsl.FieldExpression.FieldValue;
21-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
21+
import org.elasticsearch.common.xcontent.XContentSource;
2222

2323
import java.io.IOException;
2424
import java.io.StringWriter;

x-pack/plugin/ml/src/test/java/org/elasticsearch/xpack/ml/MachineLearningFeatureSetTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
import org.elasticsearch.xpack.core.ml.job.process.autodetect.state.ModelSizeStats;
4646
import org.elasticsearch.xpack.core.ml.stats.ForecastStats;
4747
import org.elasticsearch.xpack.core.ml.stats.ForecastStatsTests;
48-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
48+
import org.elasticsearch.common.xcontent.XContentSource;
4949
import org.junit.Before;
5050

5151
import java.util.Arrays;

x-pack/plugin/security/src/test/java/org/elasticsearch/xpack/security/SecurityFeatureSetTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.elasticsearch.xpack.core.XPackSettings;
2121
import org.elasticsearch.xpack.core.security.SecurityFeatureSetUsage;
2222
import org.elasticsearch.xpack.core.security.user.AnonymousUser;
23-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
23+
import org.elasticsearch.common.xcontent.XContentSource;
2424
import org.elasticsearch.xpack.security.authc.Realms;
2525
import org.elasticsearch.xpack.security.authc.support.mapper.NativeRoleMappingStore;
2626
import org.elasticsearch.xpack.security.authz.store.CompositeRolesStore;

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/actions/index/ExecutableIndexAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.elasticsearch.xpack.core.watcher.actions.ExecutableAction;
2424
import org.elasticsearch.xpack.core.watcher.execution.WatchExecutionContext;
2525
import org.elasticsearch.xpack.core.watcher.support.WatcherDateTimeUtils;
26-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
26+
import org.elasticsearch.common.xcontent.XContentSource;
2727
import org.elasticsearch.xpack.core.watcher.watch.Payload;
2828
import org.elasticsearch.xpack.watcher.support.ArrayObjectIterator;
2929
import org.joda.time.DateTime;

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/actions/index/IndexAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.elasticsearch.common.xcontent.XContentParser;
1515
import org.elasticsearch.xpack.core.watcher.actions.Action;
1616
import org.elasticsearch.xpack.core.watcher.support.WatcherDateTimeUtils;
17-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
17+
import org.elasticsearch.common.xcontent.XContentSource;
1818
import org.joda.time.DateTimeZone;
1919

2020
import java.io.IOException;

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/condition/AbstractCompareCondition.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.elasticsearch.xpack.core.watcher.condition.ExecutableCondition;
1010
import org.elasticsearch.xpack.core.watcher.execution.WatchExecutionContext;
1111
import org.elasticsearch.xpack.core.watcher.support.WatcherDateTimeUtils;
12-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
12+
import org.elasticsearch.common.xcontent.ObjectPath;
1313
import org.elasticsearch.xpack.watcher.support.Variables;
1414
import org.joda.time.DateTime;
1515
import org.joda.time.DateTimeZone;

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/condition/ArrayCompareCondition.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import org.elasticsearch.ElasticsearchParseException;
99
import org.elasticsearch.common.xcontent.XContentBuilder;
1010
import org.elasticsearch.common.xcontent.XContentParser;
11-
import org.elasticsearch.xpack.core.watcher.common.xcontent.XContentUtils;
12-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
11+
import org.elasticsearch.common.xcontent.XContentUtils;
12+
import org.elasticsearch.common.xcontent.ObjectPath;
1313

1414
import java.io.IOException;
1515
import java.time.Clock;

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/condition/CompareCondition.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
import org.elasticsearch.ElasticsearchParseException;
99
import org.elasticsearch.common.xcontent.XContentBuilder;
1010
import org.elasticsearch.common.xcontent.XContentParser;
11-
import org.elasticsearch.xpack.core.watcher.common.xcontent.XContentUtils;
12-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
11+
import org.elasticsearch.common.xcontent.XContentUtils;
12+
import org.elasticsearch.common.xcontent.ObjectPath;
1313

1414
import java.io.IOException;
1515
import java.time.Clock;

x-pack/plugin/watcher/src/main/java/org/elasticsearch/xpack/watcher/notification/slack/message/DynamicAttachments.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.elasticsearch.common.ParseField;
1010
import org.elasticsearch.common.xcontent.XContentBuilder;
1111
import org.elasticsearch.common.xcontent.XContentParser;
12-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
12+
import org.elasticsearch.common.xcontent.ObjectPath;
1313
import org.elasticsearch.xpack.watcher.common.text.TextTemplateEngine;
1414

1515
import java.io.IOException;

x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/WatcherFeatureSetTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.elasticsearch.xpack.core.watcher.WatcherFeatureSetUsage;
2424
import org.elasticsearch.xpack.core.watcher.WatcherMetaData;
2525
import org.elasticsearch.xpack.core.watcher.common.stats.Counters;
26-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
27-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
26+
import org.elasticsearch.common.xcontent.ObjectPath;
27+
import org.elasticsearch.common.xcontent.XContentSource;
2828
import org.elasticsearch.xpack.core.watcher.transport.actions.stats.WatcherStatsAction;
2929
import org.elasticsearch.xpack.core.watcher.transport.actions.stats.WatcherStatsResponse;
3030
import org.junit.Before;

x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/actions/ActionErrorIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import org.elasticsearch.common.unit.TimeValue;
1010
import org.elasticsearch.index.query.QueryBuilders;
1111
import org.elasticsearch.protocol.xpack.watcher.PutWatchResponse;
12-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
12+
import org.elasticsearch.common.xcontent.XContentSource;
1313
import org.elasticsearch.xpack.core.watcher.transport.actions.get.GetWatchResponse;
1414
import org.elasticsearch.xpack.watcher.actions.index.IndexAction;
1515
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;

x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/actions/TimeThrottleIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.elasticsearch.search.sort.SortOrder;
1515
import org.elasticsearch.test.junit.annotations.TestLogging;
1616
import org.elasticsearch.xpack.core.watcher.history.HistoryStoreField;
17-
import org.elasticsearch.xpack.core.watcher.support.xcontent.ObjectPath;
17+
import org.elasticsearch.common.xcontent.ObjectPath;
1818
import org.elasticsearch.xpack.watcher.test.AbstractWatcherIntegrationTestCase;
1919

2020
import java.util.Map;

x-pack/plugin/watcher/src/test/java/org/elasticsearch/xpack/watcher/actions/index/IndexActionTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.elasticsearch.xpack.core.watcher.actions.Action;
2929
import org.elasticsearch.xpack.core.watcher.actions.Action.Result.Status;
3030
import org.elasticsearch.xpack.core.watcher.execution.WatchExecutionContext;
31-
import org.elasticsearch.xpack.core.watcher.support.xcontent.XContentSource;
31+
import org.elasticsearch.common.xcontent.XContentSource;
3232
import org.elasticsearch.xpack.core.watcher.watch.Payload;
3333
import org.elasticsearch.xpack.watcher.test.WatcherTestUtils;
3434
import org.joda.time.DateTime;

0 commit comments

Comments
 (0)