From b5a081d3ce64f2887f676343555c7c6099a50c3d Mon Sep 17 00:00:00 2001 From: Sergei Kovalchuk Date: Tue, 21 Apr 2020 12:08:48 +0300 Subject: [PATCH] #10 Provided Implementation and tests --- .../api/providers/ConteinerProvider.java | 2 +- .../org.eclipse.chronograph.base/.classpath | 7 ++ .../org.eclipse.chronograph.base}/.project | 2 +- .../.settings/org.eclipse.jdt.core.prefs | 0 .../META-INF/MANIFEST.MF | 12 +++ .../OSGI-INF/OSGI-INF/l10n/bundle.properties | 27 ++++++ .../OSGI-INF/l10n/bundle.properties | 27 ++++++ .../build.properties | 17 ++++ .../chronograph/internal/base/AreaImpl.java | 64 +++++++++++++ .../chronograph/internal/base/BrickImpl.java | 47 ++++++++++ .../chronograph/internal/base/GroupImpl.java | 69 ++++++++++++++ .../internal/base/PositionImpl.java | 47 ++++++++++ .../internal/base/SectionImpl.java | 59 ++++++++++++ .../providers/BrickContentProviderImpl.java | 57 ++++++++++++ .../providers/ChronographProviderImpl.java | 89 +++++++++++++++++++ .../providers/GroupContentProviderImpl.java | 45 ++++++++++ .../providers/SectionContentProviderImpl.java | 46 ++++++++++ .../SubGroupContentProviderImpl.java | 45 ++++++++++ .../feature.xml | 6 ++ .../pom.xml | 5 ++ .../.classpath | 0 .../.project | 28 ++++++ .../.settings/org.eclipse.jdt.core.prefs | 7 ++ .../META-INF/MANIFEST.MF | 10 ++- .../OSGI-INF/l10n/bundle.properties | 27 ++++++ .../build.properties | 3 +- .../api/brick}/test/BrickProvidersTest.java | 12 +-- .../api/brick}/test/TestBrickAdapter.java | 3 +- .../api/brick}/test/TestBrickBuilder.java | 3 +- .../api/group/test/GroupProvidersTest.java | 42 +++++++++ .../api/group/test/TestGroupAdapter.java | 30 +++++++ .../api/group/test/TestGroupBuilder.java | 21 +++++ .../chronograph/api/test/TestInputObject.java | 5 ++ .../api/test/TestInputObjects.java | 26 ++++++ tests/pom.xml | 2 +- 35 files changed, 874 insertions(+), 18 deletions(-) create mode 100644 bundles/org.eclipse.chronograph.base/.classpath rename {tests/org.eclipse.chronograph.api.test => bundles/org.eclipse.chronograph.base}/.project (92%) rename {tests/org.eclipse.chronograph.api.test => bundles/org.eclipse.chronograph.base}/.settings/org.eclipse.jdt.core.prefs (100%) create mode 100644 bundles/org.eclipse.chronograph.base/META-INF/MANIFEST.MF create mode 100644 bundles/org.eclipse.chronograph.base/OSGI-INF/OSGI-INF/l10n/bundle.properties create mode 100644 bundles/org.eclipse.chronograph.base/OSGI-INF/l10n/bundle.properties create mode 100644 bundles/org.eclipse.chronograph.base/build.properties create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/AreaImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/BrickImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/GroupImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/PositionImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/SectionImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/BrickContentProviderImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/ChronographProviderImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/GroupContentProviderImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SectionContentProviderImpl.java create mode 100644 bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SubGroupContentProviderImpl.java rename tests/{org.eclipse.chronograph.api.test => org.eclipse.chronograph.api.tests}/.classpath (100%) create mode 100644 tests/org.eclipse.chronograph.api.tests/.project create mode 100644 tests/org.eclipse.chronograph.api.tests/.settings/org.eclipse.jdt.core.prefs rename tests/{org.eclipse.chronograph.api.test => org.eclipse.chronograph.api.tests}/META-INF/MANIFEST.MF (57%) create mode 100644 tests/org.eclipse.chronograph.api.tests/OSGI-INF/l10n/bundle.properties rename tests/{org.eclipse.chronograph.api.test => org.eclipse.chronograph.api.tests}/build.properties (61%) rename tests/{org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api => org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick}/test/BrickProvidersTest.java (83%) rename tests/{org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api => org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick}/test/TestBrickAdapter.java (90%) rename tests/{org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api => org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick}/test/TestBrickBuilder.java (88%) create mode 100644 tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/GroupProvidersTest.java create mode 100644 tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupAdapter.java create mode 100644 tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupBuilder.java rename tests/{org.eclipse.chronograph.api.test => org.eclipse.chronograph.api.tests}/src/org/eclipse/chronograph/api/test/TestInputObject.java (95%) create mode 100644 tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObjects.java diff --git a/bundles/org.eclipse.chronograph.api/src/org/eclipse/chronograph/internal/api/providers/ConteinerProvider.java b/bundles/org.eclipse.chronograph.api/src/org/eclipse/chronograph/internal/api/providers/ConteinerProvider.java index cdbe818..c682c8b 100644 --- a/bundles/org.eclipse.chronograph.api/src/org/eclipse/chronograph/internal/api/providers/ConteinerProvider.java +++ b/bundles/org.eclipse.chronograph.api/src/org/eclipse/chronograph/internal/api/providers/ConteinerProvider.java @@ -15,7 +15,7 @@ public interface ConteinerProvider { * * @return provider {@link SectionContentProvider} */ - SectionContentProvider getSectionContentProvider(); + SectionContentProvider getSectionContentProvider(); /** * The method designed to provide {@link GroupContentProvider} provider diff --git a/bundles/org.eclipse.chronograph.base/.classpath b/bundles/org.eclipse.chronograph.base/.classpath new file mode 100644 index 0000000..43b9862 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/tests/org.eclipse.chronograph.api.test/.project b/bundles/org.eclipse.chronograph.base/.project similarity index 92% rename from tests/org.eclipse.chronograph.api.test/.project rename to bundles/org.eclipse.chronograph.base/.project index 12dc4ff..3f60619 100644 --- a/tests/org.eclipse.chronograph.api.test/.project +++ b/bundles/org.eclipse.chronograph.base/.project @@ -1,6 +1,6 @@ - org.eclipse.chronograph.api.test + org.eclipse.chronograph.base diff --git a/tests/org.eclipse.chronograph.api.test/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.chronograph.base/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from tests/org.eclipse.chronograph.api.test/.settings/org.eclipse.jdt.core.prefs rename to bundles/org.eclipse.chronograph.base/.settings/org.eclipse.jdt.core.prefs diff --git a/bundles/org.eclipse.chronograph.base/META-INF/MANIFEST.MF b/bundles/org.eclipse.chronograph.base/META-INF/MANIFEST.MF new file mode 100644 index 0000000..b3f270d --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/META-INF/MANIFEST.MF @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Version: 0.1.0.qualifier +Bundle-Name: %Bundle-Name +Bundle-Vendor: %Bundle-Vendor +Bundle-Copyright: %Bundle-Copyright +Bundle-SymbolicName: org.eclipse.chronograph.base +Automatic-Module-Name: org.eclipse.chronometer.core +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Require-Bundle: org.eclipse.chronograph.api +Export-Package: org.eclipse.chronograph.internal.base, + org.eclipse.chronograph.internal.providers diff --git a/bundles/org.eclipse.chronograph.base/OSGI-INF/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.chronograph.base/OSGI-INF/OSGI-INF/l10n/bundle.properties new file mode 100644 index 0000000..f999df2 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/OSGI-INF/OSGI-INF/l10n/bundle.properties @@ -0,0 +1,27 @@ +############################################################################### +# Copyright (c) 2020 ArSysOp +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0. +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Sergei Kovalchuk - initial API and implementation +############################################################################### + +Bundle-Name = Eclipse Chronograph Core +Bundle-Vendor = Eclipse +Bundle-Copyright = Copyright (c) 2020 ArSysOp and others.\n\ +\n\ +This program and the accompanying materials are made\n\ +available under the terms of the Eclipse Public License 2.0\n\ +which is available at https://www.eclipse.org/legal/epl-2.0/\n\ +\n\ +SPDX-License-Identifier: EPL-2.0\n\ + + + + + diff --git a/bundles/org.eclipse.chronograph.base/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.chronograph.base/OSGI-INF/l10n/bundle.properties new file mode 100644 index 0000000..f999df2 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/OSGI-INF/l10n/bundle.properties @@ -0,0 +1,27 @@ +############################################################################### +# Copyright (c) 2020 ArSysOp +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0. +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Sergei Kovalchuk - initial API and implementation +############################################################################### + +Bundle-Name = Eclipse Chronograph Core +Bundle-Vendor = Eclipse +Bundle-Copyright = Copyright (c) 2020 ArSysOp and others.\n\ +\n\ +This program and the accompanying materials are made\n\ +available under the terms of the Eclipse Public License 2.0\n\ +which is available at https://www.eclipse.org/legal/epl-2.0/\n\ +\n\ +SPDX-License-Identifier: EPL-2.0\n\ + + + + + diff --git a/bundles/org.eclipse.chronograph.base/build.properties b/bundles/org.eclipse.chronograph.base/build.properties new file mode 100644 index 0000000..d87fe03 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/build.properties @@ -0,0 +1,17 @@ +############################################################################### +# Copyright (c) 2020 ArSysOp and others +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# http://www.eclipse.org/legal/epl-2.0. +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Sergei Kovalchuk - initial API and implementation +############################################################################### +source.. = src/ +output.. = target/classes/ +bin.includes = META-INF/,\ + .,\ + OSGI-INF/ diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/AreaImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/AreaImpl.java new file mode 100644 index 0000000..94ab4e2 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/AreaImpl.java @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp and Others + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Sergei Kovalchuk - initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.base; + +import org.eclipse.chronograph.internal.api.Area; + +/** + * + * Implementation of {@link Area} interface intended to store graphical + * object location + */ +public class AreaImpl implements Area { + + private int x = 0; + private int y = 0; + private int width; + private int height; + + public AreaImpl(int x, int y, int width, int height) { + super(); + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + @Override + public int width() { + return width; + } + + @Override + public int height() { + return height; + } + + @Override + public int x() { + return x; + } + + @Override + public int y() { + return y; + } +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/BrickImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/BrickImpl.java new file mode 100644 index 0000000..50403bc --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/BrickImpl.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.base; + +import org.eclipse.chronograph.internal.api.Brick; +import org.eclipse.chronograph.internal.api.BrickContainer; +import org.eclipse.chronograph.internal.api.Position; + +public class BrickImpl implements Brick { + + //public static final int DRAWING_ITEM_HEIGHT = 20; + private String id; + private Position position; + private BrickContainer parent; + + public BrickImpl(BrickContainer parent, String id, int start, int end) { + this.id = id; + this.parent = parent; + this.position = new PositionImpl(start, end); + } + + public String id() { + return this.id; + } + + @Override + public BrickContainer container() { + return parent; + } + + @Override + public Position position() { + return position; + } + +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/GroupImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/GroupImpl.java new file mode 100644 index 0000000..a403418 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/GroupImpl.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.base; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.chronograph.internal.api.Brick; +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.GroupContainer; + +/** + * + * Implementation of {@link Group} interface + * + */ +public class GroupImpl implements Group { + + private String id; + private GroupContainer parent; + private List bricks = new ArrayList(); + + public GroupImpl(String id, GroupContainer parent) { + this.id = id; + this.parent = parent; + } + + public GroupImpl(String id, List bricks) { + this.id = id; + this.bricks = bricks; + } + + public GroupImpl(String id, GroupContainer parent, List bricks) { + this.id = id; + this.parent = parent; + this.bricks = bricks; + } + + public String id() { + return id; + } + + @Override + public List bricks() { + return bricks; + } + + @Override + public GroupContainer container() { + return parent; + } + + @Override + public List groups() { + return parent.groups(); + } + +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/PositionImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/PositionImpl.java new file mode 100644 index 0000000..83c1e1a --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/PositionImpl.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.base; + +import org.eclipse.chronograph.internal.api.Position; + +/** + * + * Implementation of {@link Position} interface intended to store period of time + * + */ +public class PositionImpl implements Position { + private long start; + private long end; + + public PositionImpl(long start, long end) { + this.start = start; + this.end = end; + } + + @Override + public long start() { + return start; + } + + @Override + public long end() { + return end; + } + + @Override + public long duration() { + return end - start; + } + +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/SectionImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/SectionImpl.java new file mode 100644 index 0000000..27c4138 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/base/SectionImpl.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.base; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.chronograph.internal.api.Brick; +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.Section; + +/** + * + * Implementation of {@link Section} + * + */ +public class SectionImpl implements Section { + + private String id; + private List groups = new ArrayList<>(); + + public SectionImpl(String id) { + this.id = id; + } + + public SectionImpl(String id, List groups) { + this.id = id; + this.groups = groups; + } + + @Override + public String id() { + return id; + } + + public List groups() { + return groups; + } + + @Override + public List bricks() { + List bricks = new ArrayList<>(); + for (Group gr : groups) { + bricks.addAll(gr.bricks()); + } + return bricks; + } +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/BrickContentProviderImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/BrickContentProviderImpl.java new file mode 100644 index 0000000..3079f41 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/BrickContentProviderImpl.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.providers; + +import java.util.List; + +import org.eclipse.chronograph.internal.api.Brick; +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.adapters.BrickAdapter; +import org.eclipse.chronograph.internal.api.builders.BrickBuilder; +import org.eclipse.chronograph.internal.api.providers.BrickContentProvider; + +/** + * + * Template provider implementation of {@link BrickContentProvider} interface + * + * @param - input object type + * @param - intermediate adapted object type + */ +public class BrickContentProviderImpl implements BrickContentProvider { + + private final BrickBuilder, D> builder; + private final BrickAdapter adapter; + + public BrickContentProviderImpl(BrickBuilder, D> brickBuilder, BrickAdapter brickAdapter) { + + this.builder = brickBuilder; + this.adapter = brickAdapter; + } + + @Override + public List getBricksByGroup(List input, Group group) { + return adapter.adapt(builder.applyGroup(input, group.id()), group); + } + + @Override + public List getBricksBySubGroup(List input, String groupId, Group subGroup) { + return adapter.adapt(builder.applySubGroup(input, groupId, subGroup.id()), subGroup); + } + + @Override + public List getBricks(List input) { + return adapter.adapt(builder.apply(input), null); + } + +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/ChronographProviderImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/ChronographProviderImpl.java new file mode 100644 index 0000000..e965fb8 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/ChronographProviderImpl.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.providers; + +import java.util.List; + +import org.eclipse.chronograph.internal.api.providers.BrickContentProvider; +import org.eclipse.chronograph.internal.api.providers.ConteinerProvider; +import org.eclipse.chronograph.internal.api.providers.GroupContentProvider; +import org.eclipse.chronograph.internal.api.providers.SectionContentProvider; +import org.eclipse.chronograph.internal.api.providers.StageLabelProvider; +import org.eclipse.chronograph.internal.api.providers.SubGroupContentProvider; + +/** + * + * Aggregated provider implementation of {@link ConteinerProvider} + * + * @param - provider type + */ +public class ChronographProviderImpl implements ConteinerProvider { + + private final SectionContentProvider sectionProvider; + private final GroupContentProvider groupProvider; + private final SubGroupContentProvider subGroupProvider; + private final BrickContentProvider brickProvider; + private final StageLabelProvider labelProvider; + private List input; + + public ChronographProviderImpl(List input, SectionContentProvider sectionProvider, // + GroupContentProvider groupProvider, // + SubGroupContentProvider subGroupProvider, // + BrickContentProvider brickProvider, // + StageLabelProvider labelProvider) { + super(); + this.sectionProvider = sectionProvider; + this.groupProvider = groupProvider; + this.subGroupProvider = subGroupProvider; + this.brickProvider = brickProvider; + this.labelProvider = labelProvider; + this.input = input; + } + + @Override + public SectionContentProvider getSectionContentProvider() { + return sectionProvider; + } + + @Override + public GroupContentProvider getGroupContentProvider() { + return groupProvider; + } + + @Override + public SubGroupContentProvider getSubGroupContentProvider() { + return subGroupProvider; + } + + @Override + public BrickContentProvider getBrickContentProvider() { + return brickProvider; + } + + @Override + public StageLabelProvider getLabelProvider() { + return labelProvider; + } + + @Override + public List getInput() { + return input; + } + + @Override + public void updateInput(List input) { + this.input = input; + } + +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/GroupContentProviderImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/GroupContentProviderImpl.java new file mode 100644 index 0000000..2af5647 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/GroupContentProviderImpl.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.providers; + +import java.util.List; + +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.Section; +import org.eclipse.chronograph.internal.api.adapters.GroupAdapter; +import org.eclipse.chronograph.internal.api.builders.GroupBuilder; +import org.eclipse.chronograph.internal.api.providers.GroupContentProvider; + +/** + * + * Template provider implementation of {@link GroupContentProvider} interface + * + * @param - input object type + * @param - intermediate adapted object type + */ +public class GroupContentProviderImpl implements GroupContentProvider { + + private final GroupBuilder, D> builder; + private final GroupAdapter adapter; + + public GroupContentProviderImpl(GroupBuilder, D> groupBuilder, GroupAdapter groupAdapter) { + this.builder = groupBuilder; + this.adapter = groupAdapter; + } + + @Override + public List getGroupsBySection(List input, Section section) { + return adapter.adapt(builder.applySection(input, section.id()), section); + } +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SectionContentProviderImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SectionContentProviderImpl.java new file mode 100644 index 0000000..1e3b6a3 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SectionContentProviderImpl.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.providers; + +import java.util.List; + +import org.eclipse.chronograph.internal.api.Section; +import org.eclipse.chronograph.internal.api.adapters.SectionAdapter; +import org.eclipse.chronograph.internal.api.builders.SectionBuilder; +import org.eclipse.chronograph.internal.api.providers.SectionContentProvider; + +/** + * + * Template provider implementation of {@link SectionContentProvider} interface + * + * @param - input object type + * @param - intermediate adapted object type + */ +public class SectionContentProviderImpl implements SectionContentProvider { + + private final SectionBuilder, D> builder; + private final SectionAdapter adapter; + + public SectionContentProviderImpl(SectionBuilder, D> sectionBuilder, SectionAdapter adapter) { + + this.builder = sectionBuilder; + this.adapter = adapter; + } + + @Override + public List
getSections(List input) { + return adapter.adapt(builder.apply(input)); + } + +} diff --git a/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SubGroupContentProviderImpl.java b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SubGroupContentProviderImpl.java new file mode 100644 index 0000000..24fc871 --- /dev/null +++ b/bundles/org.eclipse.chronograph.base/src/org/eclipse/chronograph/internal/providers/SubGroupContentProviderImpl.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2020 ArSysOp + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Sergei Kovalchuk - + * initial API and implementation + *******************************************************************************/ +package org.eclipse.chronograph.internal.providers; + +import java.util.List; + +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.Section; +import org.eclipse.chronograph.internal.api.adapters.SubGroupAdapter; +import org.eclipse.chronograph.internal.api.builders.SubGroupBuilder; +import org.eclipse.chronograph.internal.api.providers.SubGroupContentProvider; + +/** + * + * Template provider implementation of {@link SubGroupContentProvider} interface + * + * @param - input object type + * @param - intermediate adapted object type + */ +public class SubGroupContentProviderImpl implements SubGroupContentProvider { + private final SubGroupBuilder, D> builder; + private final SubGroupAdapter adapter; + + public SubGroupContentProviderImpl(SubGroupBuilder, D> groupBuilder, + SubGroupAdapter groupAdapter) { + this.builder = groupBuilder; + this.adapter = groupAdapter; + } + + @Override + public List getGroupsBySectionGroup(List input, Section section, Group group) { + return adapter.adapt(builder.applySectionGroup(input, section.id(), group.id()), group); + } +} \ No newline at end of file diff --git a/features/org.eclipse.chronograph.feature/feature.xml b/features/org.eclipse.chronograph.feature/feature.xml index 4fa04f2..7b75eff 100644 --- a/features/org.eclipse.chronograph.feature/feature.xml +++ b/features/org.eclipse.chronograph.feature/feature.xml @@ -37,5 +37,11 @@ install-size="0" version="0.0.0" unpack="false"/> + diff --git a/releng/org.eclipse.chronograph.aggregator/pom.xml b/releng/org.eclipse.chronograph.aggregator/pom.xml index 7572798..7702ea0 100644 --- a/releng/org.eclipse.chronograph.aggregator/pom.xml +++ b/releng/org.eclipse.chronograph.aggregator/pom.xml @@ -30,7 +30,12 @@ ../../bundles/org.eclipse.chronograph.api + ../../bundles/org.eclipse.chronograph.base + ../../features/org.eclipse.chronograph.feature + + ../../tests/org.eclipse.chronograph.api.tests + ../../releng/org.eclipse.chronograph.repository diff --git a/tests/org.eclipse.chronograph.api.test/.classpath b/tests/org.eclipse.chronograph.api.tests/.classpath similarity index 100% rename from tests/org.eclipse.chronograph.api.test/.classpath rename to tests/org.eclipse.chronograph.api.tests/.classpath diff --git a/tests/org.eclipse.chronograph.api.tests/.project b/tests/org.eclipse.chronograph.api.tests/.project new file mode 100644 index 0000000..7e071d1 --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/.project @@ -0,0 +1,28 @@ + + + org.eclipse.chronograph.api.tests + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + org.eclipse.jdt.core.javanature + + diff --git a/tests/org.eclipse.chronograph.api.tests/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.chronograph.api.tests/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..0c68a61 --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,7 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/tests/org.eclipse.chronograph.api.test/META-INF/MANIFEST.MF b/tests/org.eclipse.chronograph.api.tests/META-INF/MANIFEST.MF similarity index 57% rename from tests/org.eclipse.chronograph.api.test/META-INF/MANIFEST.MF rename to tests/org.eclipse.chronograph.api.tests/META-INF/MANIFEST.MF index 55ece59..517b6f6 100644 --- a/tests/org.eclipse.chronograph.api.test/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.chronograph.api.tests/META-INF/MANIFEST.MF @@ -1,9 +1,11 @@ Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: Test -Bundle-SymbolicName: org.eclipse.chronograph.api.test -Bundle-Version: 1.0.0.qualifier Automatic-Module-Name: org.eclipse.chronograph.api.test +Bundle-ManifestVersion: 2 +Bundle-SymbolicName: org.eclipse.chronograph.api.tests +Bundle-Version: 0.1.0.qualifier +Bundle-Name: %Bundle-Name +Bundle-Vendor: %Bundle-Vendor +Bundle-Copyright: %Bundle-Copyright Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Require-Bundle: org.junit, org.eclipse.chronograph.base, diff --git a/tests/org.eclipse.chronograph.api.tests/OSGI-INF/l10n/bundle.properties b/tests/org.eclipse.chronograph.api.tests/OSGI-INF/l10n/bundle.properties new file mode 100644 index 0000000..f4db15e --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/OSGI-INF/l10n/bundle.properties @@ -0,0 +1,27 @@ +#Properties file for org.eclipse.chronograph.api.tests +############################################################################### +# Copyright (c) 2020 ArSysOp +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License 2.0 which is available at +# https://www.eclipse.org/legal/epl-2.0/. +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Sergei Kovalchuk - initial API and implementation +############################################################################### + +Bundle-Name = Chronograph API Base Tests +Bundle-Vendor = Eclipse Passage +Bundle-Vendor = Eclipse Chronograph +Bundle-Copyright = Copyright (c) 2020 ArSysOp.\n\ +\n\ +This program and the accompanying materials are made\n\ +available under the terms of the Eclipse Public License 2.0\n\ +which is available at https://www.eclipse.org/legal/epl-2.0/\n\ +\n\ +SPDX-License-Identifier: EPL-2.0\n\ + + + diff --git a/tests/org.eclipse.chronograph.api.test/build.properties b/tests/org.eclipse.chronograph.api.tests/build.properties similarity index 61% rename from tests/org.eclipse.chronograph.api.test/build.properties rename to tests/org.eclipse.chronograph.api.tests/build.properties index 56d7765..67e6565 100644 --- a/tests/org.eclipse.chronograph.api.test/build.properties +++ b/tests/org.eclipse.chronograph.api.tests/build.properties @@ -1,4 +1,5 @@ source.. = src/ output.. = target/classes/ bin.includes = META-INF/,\ - . + .,\ + OSGI-INF/ diff --git a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/BrickProvidersTest.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/BrickProvidersTest.java similarity index 83% rename from tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/BrickProvidersTest.java rename to tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/BrickProvidersTest.java index 147ab0b..0a338e2 100644 --- a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/BrickProvidersTest.java +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/BrickProvidersTest.java @@ -1,4 +1,4 @@ -package org.eclipse.chronograph.api.test; +package org.eclipse.chronograph.api.brick.test; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -6,6 +6,8 @@ import java.util.ArrayList; import java.util.List; +import org.eclipse.chronograph.api.test.TestInputObject; +import org.eclipse.chronograph.api.test.TestInputObjects; import org.eclipse.chronograph.internal.api.Brick; import org.eclipse.chronograph.internal.api.Group; import org.eclipse.chronograph.internal.api.Section; @@ -31,13 +33,7 @@ public class BrickProvidersTest { @Before public void prepareModel() { - input.add(new TestInputObject("test.id.1", "test.container.id.1", "test.subcontainer.id.1", "test.parent.id.1", - "test.name.1", "test.description.1", 1, 2)); - input.add(new TestInputObject("test.id.2", "test.container.id.2", "test.subcontainer.id.2", "test.parent.id.2", - "test.name.2", "test.description.2", 2, 3)); - input.add(new TestInputObject("test.id.3", "test.container.id.3", "test.subcontainer.id.3", "test.parent.id.3", - "test.name.3", "test.description.3", 3, 4)); - + input = TestInputObjects.getInput(); testBrickBuilder = new TestBrickBuilder(); testBrickAdapter = new TestBrickAdapter(); testBrickProvider = new BrickContentProviderImpl(testBrickBuilder, diff --git a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestBrickAdapter.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/TestBrickAdapter.java similarity index 90% rename from tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestBrickAdapter.java rename to tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/TestBrickAdapter.java index 208c5e3..409dc6d 100644 --- a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestBrickAdapter.java +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/TestBrickAdapter.java @@ -1,4 +1,4 @@ -package org.eclipse.chronograph.api.test; +package org.eclipse.chronograph.api.brick.test; import java.util.HashMap; import java.util.List; @@ -6,6 +6,7 @@ import java.util.function.Function; import java.util.stream.Collectors; +import org.eclipse.chronograph.api.test.TestInputObject; import org.eclipse.chronograph.internal.api.Brick; import org.eclipse.chronograph.internal.api.Group; import org.eclipse.chronograph.internal.api.adapters.BrickAdapter; diff --git a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestBrickBuilder.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/TestBrickBuilder.java similarity index 88% rename from tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestBrickBuilder.java rename to tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/TestBrickBuilder.java index 99cef44..032398b 100644 --- a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestBrickBuilder.java +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/brick/test/TestBrickBuilder.java @@ -1,8 +1,9 @@ -package org.eclipse.chronograph.api.test; +package org.eclipse.chronograph.api.brick.test; import java.util.List; import java.util.stream.Collectors; +import org.eclipse.chronograph.api.test.TestInputObject; import org.eclipse.chronograph.internal.api.builders.BrickBuilder; public class TestBrickBuilder implements BrickBuilder, TestInputObject> { diff --git a/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/GroupProvidersTest.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/GroupProvidersTest.java new file mode 100644 index 0000000..906b471 --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/GroupProvidersTest.java @@ -0,0 +1,42 @@ +package org.eclipse.chronograph.api.group.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.chronograph.api.test.TestInputObject; +import org.eclipse.chronograph.api.test.TestInputObjects; +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.Section; +import org.eclipse.chronograph.internal.api.adapters.GroupAdapter; +import org.eclipse.chronograph.internal.api.builders.GroupBuilder; +import org.eclipse.chronograph.internal.api.providers.GroupContentProvider; +import org.eclipse.chronograph.internal.base.SectionImpl; +import org.eclipse.chronograph.internal.providers.GroupContentProviderImpl; +import org.junit.Before; +import org.junit.Test; + +public class GroupProvidersTest { + private List input = new ArrayList<>(); + GroupBuilder, TestInputObject> groupBuilder; + GroupAdapter groupAdapter; + GroupContentProvider groupProvider; + + @Before + public void prepareModel() { + input = TestInputObjects.getInput(); + groupBuilder = new TestGroupBuilder(); + groupAdapter = new TestGroupAdapter(); + groupProvider = new GroupContentProviderImpl(groupBuilder, groupAdapter); + } + + @Test + public void groupProviderTest() { + Section section = new SectionImpl("test.parent.id.1"); + List groupsBySection = groupProvider.getGroupsBySection(input, section); + assertNotNull(groupsBySection); + assertFalse(groupsBySection.isEmpty()); + } +} diff --git a/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupAdapter.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupAdapter.java new file mode 100644 index 0000000..ac05e68 --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupAdapter.java @@ -0,0 +1,30 @@ +package org.eclipse.chronograph.api.group.test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.eclipse.chronograph.api.test.TestInputObject; +import org.eclipse.chronograph.internal.api.Group; +import org.eclipse.chronograph.internal.api.Section; +import org.eclipse.chronograph.internal.api.adapters.GroupAdapter; +import org.eclipse.chronograph.internal.base.GroupImpl; + +public class TestGroupAdapter implements GroupAdapter { + + @Override + public List adapt(List inputObjects, Section container) { + Map objectToGroup = new HashMap<>(); + + return inputObjects.stream().map(p -> objectToGroup.computeIfAbsent(p, new Function() { + public Group apply(TestInputObject t) { + return new GroupImpl(t.containerId, container); + } + + })).collect(Collectors.toList()); + + } + +} diff --git a/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupBuilder.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupBuilder.java new file mode 100644 index 0000000..1fe6935 --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/group/test/TestGroupBuilder.java @@ -0,0 +1,21 @@ +package org.eclipse.chronograph.api.group.test; + +import java.util.List; +import java.util.stream.Collectors; + +import org.eclipse.chronograph.api.test.TestInputObject; +import org.eclipse.chronograph.internal.api.builders.GroupBuilder; + +public class TestGroupBuilder implements GroupBuilder, TestInputObject> { + + @Override + public List apply(List t) { + return t; + } + + @Override + public List applySection(List input, String sectionId) { + return input.stream().filter(p -> p.rootContainerId.equals(sectionId)).collect(Collectors.toList()); + } + +} diff --git a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestInputObject.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObject.java similarity index 95% rename from tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestInputObject.java rename to tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObject.java index 871a025..0e34866 100644 --- a/tests/org.eclipse.chronograph.api.test/src/org/eclipse/chronograph/api/test/TestInputObject.java +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObject.java @@ -1,5 +1,10 @@ package org.eclipse.chronograph.api.test; +/** + * + * Test input object implementation + * + */ public class TestInputObject { public String id; diff --git a/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObjects.java b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObjects.java new file mode 100644 index 0000000..e2fc934 --- /dev/null +++ b/tests/org.eclipse.chronograph.api.tests/src/org/eclipse/chronograph/api/test/TestInputObjects.java @@ -0,0 +1,26 @@ +package org.eclipse.chronograph.api.test; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * Test input faced + * + */ +public class TestInputObjects { + private static List input = new ArrayList<>(); + static { + input.add(new TestInputObject("test.id.1", "test.container.id.1", "test.subcontainer.id.1", "test.parent.id.1", + "test.name.1", "test.description.1", 1, 2)); + input.add(new TestInputObject("test.id.2", "test.container.id.2", "test.subcontainer.id.2", "test.parent.id.2", + "test.name.2", "test.description.2", 2, 3)); + input.add(new TestInputObject("test.id.3", "test.container.id.3", "test.subcontainer.id.3", "test.parent.id.3", + "test.name.3", "test.description.3", 3, 4)); + } + + public static List getInput() { + return input; + } + +} diff --git a/tests/pom.xml b/tests/pom.xml index 3c9891a..f034459 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -24,7 +24,7 @@ org.eclipse.chronograph org.eclipse.chronograph.parent - 0.1.0 + 0.1.0-SNAPSHOT ../releng/org.eclipse.chronograph.parent