-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for json-schema in configuration source type #66
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<?eclipse version="3.4"?> | ||
<plugin> | ||
<extension | ||
point="org.eclipse.tracecompass.tmf.core.config"> | ||
<source | ||
class="org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.config.TestSchemaConfigurationSource" | ||
id="org.eclipse.tracecompass.tmf.core.config.xmlsourcetype"> | ||
</source> | ||
</extension> | ||
</plugin> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
{ | ||
"$schema": "https://json-schema.org/draft/2020-12/schema", | ||
"$id": "https://org.eclipse.tracecompass/custom-execution-analysis.json", | ||
"title": "Custom Execution Analysis", | ||
"description": "Custom Execution Analysis schema", | ||
"type": "object", | ||
"properties": { | ||
"cpus": { | ||
"description": "array of integer", | ||
"type": "array", | ||
"items": { | ||
"type": "number" | ||
} | ||
}, | ||
"thread": { | ||
"description": "Thread regular expression pattern", | ||
"type": "string" | ||
}, | ||
"phone": { | ||
"description": "Phone number", | ||
"type": "string", | ||
"pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$" | ||
}, | ||
"label": { | ||
"description": "Optional label text", | ||
"type": "string" | ||
} | ||
}, | ||
"required": ["thread"] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
/******************************************************************************* | ||
* Copyright (c) 2023 Ericsson | ||
* | ||
* All rights reserved. This program and the accompanying materials are | ||
* made available under the terms of the Eclipse Public License 2.0 which | ||
* accompanies this distribution, and is available at | ||
* https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
*******************************************************************************/ | ||
package org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests.stubs.config; | ||
|
||
import static org.eclipse.tracecompass.common.core.NonNullUtils.nullToEmptyString; | ||
|
||
import java.io.File; | ||
import java.io.IOException; | ||
import java.net.URISyntaxException; | ||
import java.net.URL; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import org.eclipse.core.runtime.FileLocator; | ||
import org.eclipse.core.runtime.IPath; | ||
import org.eclipse.core.runtime.Platform; | ||
import org.eclipse.jdt.annotation.NonNull; | ||
import org.eclipse.jdt.annotation.Nullable; | ||
import org.eclipse.tracecompass.tmf.core.config.ITmfConfiguration; | ||
import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSource; | ||
import org.eclipse.tracecompass.tmf.core.config.ITmfConfigurationSourceType; | ||
import org.eclipse.tracecompass.tmf.core.config.TmfConfigurationSourceType; | ||
import org.eclipse.tracecompass.tmf.core.exceptions.TmfConfigurationException; | ||
import org.osgi.framework.Bundle; | ||
|
||
/** | ||
* Test class | ||
*/ | ||
public class TestSchemaConfigurationSource implements ITmfConfigurationSource { | ||
|
||
private static final @NonNull ITmfConfigurationSourceType fType; | ||
|
||
private static final @NonNull String TEST_ANALYSIS_TYPE_ID = "org.eclipse.tracecompass.tmf.core.config.testschemasourcetype"; //$NON-NLS-1$ | ||
private static final @NonNull String NAME = nullToEmptyString("Test Schema Type"); //$NON-NLS-1$ | ||
private static final @NonNull String DESCRIPTION = nullToEmptyString("Test Type with schema"); //$NON-NLS-1$ | ||
|
||
static { | ||
Bundle bundle = Platform.getBundle("org.eclipse.tracecompass.incubator.trace.server.jersey.rest.core.tests"); | ||
IPath defaultPath = new org.eclipse.core.runtime.Path("schema/custom-execution-analysis.json"); //$NON-NLS-1$ | ||
URL url = FileLocator.find(bundle, defaultPath, null); | ||
File schemaFile = null; | ||
try { | ||
schemaFile = new File(FileLocator.toFileURL(url).toURI()); | ||
} catch (URISyntaxException | IOException e) { | ||
e.printStackTrace(); | ||
} | ||
fType = new TmfConfigurationSourceType.Builder() | ||
.setId(TEST_ANALYSIS_TYPE_ID) | ||
.setDescription(DESCRIPTION) | ||
.setName(NAME) | ||
.setSchemaFile(schemaFile) | ||
PatrickTasse marked this conversation as resolved.
Show resolved
Hide resolved
|
||
.setConfigParamDescriptors(Collections.emptyList()).build(); | ||
} | ||
|
||
/** | ||
* Constructor | ||
*/ | ||
public TestSchemaConfigurationSource() { | ||
} | ||
|
||
@Override | ||
public @NonNull ITmfConfigurationSourceType getConfigurationSourceType() { | ||
return fType; | ||
} | ||
|
||
@Override | ||
public @NonNull ITmfConfiguration create(@NonNull Map<@NonNull String, @NonNull Object> parameters) throws TmfConfigurationException { | ||
throw new TmfConfigurationException("Not implemented yet"); //$NON-NLS-1$ | ||
} | ||
|
||
@Override | ||
public @NonNull ITmfConfiguration update(@NonNull String id, @NonNull Map<@NonNull String, @NonNull Object> parameters) throws TmfConfigurationException { | ||
throw new TmfConfigurationException("Not implemented yet"); //$NON-NLS-1$ | ||
} | ||
|
||
@Override | ||
public @Nullable ITmfConfiguration get(@NonNull String id) { | ||
return null; | ||
} | ||
|
||
@Override | ||
public @Nullable ITmfConfiguration remove(@NonNull String id) { | ||
return null; | ||
} | ||
|
||
@Override | ||
public boolean contains(@NonNull String id) { | ||
return false; | ||
} | ||
|
||
@Override | ||
public @NonNull List<@NonNull ITmfConfiguration> getConfigurations() { | ||
return Collections.emptyList(); | ||
} | ||
|
||
@Override | ||
public void dispose() { | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -46,6 +46,26 @@ public interface ConfigurationSourceType { | |
* configuration instance of this type. Use 'path' key for file | ||
* URIs. | ||
*/ | ||
@Schema(description = "A list of configuration parameter descriptors to be passed when creating or updating a configuration instance of this type.") | ||
@Schema(description = "A list of configuration parameter descriptors to be " | ||
+ "passed when creating or updating a configuration instance of this " | ||
+ "type. Use this instead of schema. Omit if not used.") | ||
List<ConfigurationParameterDescriptor> getParameterDescriptors(); | ||
|
||
/** | ||
* @return a JSON schema that describes the parameters that the front-end | ||
* needs to provide with corresponding values. Use this for complex | ||
* parameter descriptions instead of parameterDescriptors. | ||
*/ | ||
@Schema(description = "A JSON object that describes a JSON schema for parameters that " | ||
+ "the front-end needs to provide with corresponding values. The schema has to " | ||
+ "adhere to JSON schema specification (see https://json-schema.org/). " | ||
+ "Use this for complex parameter descriptions instead of parameterDescriptors. " | ||
+ "Omit if not used.") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please mention that the object should adhere to the JSON Schema specification. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ok There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done |
||
OptionalSchema getSchema(); | ||
|
||
/** | ||
* A JSON Object defining a schema. | ||
*/ | ||
interface OptionalSchema { | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should it be added to the builder and to TmfConfigurationSourceType class?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This would that TmfConfigurationSourceType would require the jackson JSON parser because
fSchema
is of typeJsonNode
. Besides theTmfConfigurationSourceTypeStub
a client-side implementation for testing the trace server as part of the unit tests.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, if I understand correctly, this stub class is on the client side of the test, not the trace-server side, and it uses TmfConfigurationSourceType as simplification to deserialize the trace-server response?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, it's on the client side of the test.