Skip to content

Commit 35f3305

Browse files
committed
Different metadata repository for each session
1 parent bb94226 commit 35f3305

File tree

79 files changed

+628
-577
lines changed

Some content is hidden

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

79 files changed

+628
-577
lines changed

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@
116116
</profiles>
117117

118118
<properties>
119-
<revision>1.1.5-SNAPSHOT</revision>
119+
<revision>1.2.0-SNAPSHOT</revision>
120120
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
121121
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
122122
<maven.compiler.source>11</maven.compiler.source>

vtl-api/src/main/java/it/bancaditalia/oss/vtl/config/ConfigurationManager.java

+1-11
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,6 @@
4343
*/
4444
public interface ConfigurationManager
4545
{
46-
/**
47-
* Same as {@link ConfigurationManagerFactory#getInstance()}.
48-
*
49-
* @return a default instance of this interface.
50-
*/
51-
public static ConfigurationManager getDefault()
52-
{
53-
return ConfigurationManagerFactory.getInstance();
54-
}
55-
5646
/**
5747
* @return The {@link MetadataRepository} instance
5848
*/
@@ -82,7 +72,7 @@ public default VTLSession createSession(Reader reader) throws IOException
8272
/**
8373
* @return The {@link List} of {@link Environment} instances
8474
*/
85-
public List<? extends Environment> getEnvironments();
75+
public List<Environment> getEnvironments();
8676

8777
/**
8878
* Saves the current configuration to the provided Writer as a list of Java properties.

vtl-api/src/main/java/it/bancaditalia/oss/vtl/environment/Environment.java

+9-15
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121

2222
import java.util.Optional;
2323

24+
import it.bancaditalia.oss.vtl.model.data.DataSet;
2425
import it.bancaditalia.oss.vtl.model.data.VTLValue;
2526
import it.bancaditalia.oss.vtl.model.data.VTLValueMetadata;
27+
import it.bancaditalia.oss.vtl.session.MetadataRepository;
2628

2729
/**
2830
* A provider of VTL data objects.
@@ -37,15 +39,19 @@ public interface Environment
3739
* @param alias The name of requested object.
3840
* @return true if this environment provides the specified object.
3941
*/
40-
public boolean contains(String alias);
42+
public default boolean contains(String alias)
43+
{
44+
return getValueMetadata(alias).isPresent();
45+
}
4146

4247
/**
4348
* Returns an {@link Optional} reference to a VTL object with the specified name in this environment.
4449
*
4550
* @param alias The name of requested object.
51+
* @param repo TODO
4652
* @return An Optional with a reference to the requested object o {@link Optional#empty()} if the object is not found in this environment.
4753
*/
48-
public Optional<VTLValue> getValue(String alias);
54+
public Optional<VTLValue> getValue(MetadataRepository repo, String alias);
4955

5056
/**
5157
* Persistently store the given value in this environment for later use
@@ -67,18 +73,6 @@ public default boolean store(VTLValue value, String alias)
6773
*/
6874
public default Optional<VTLValueMetadata> getValueMetadata(String alias)
6975
{
70-
return getValue(alias).map(VTLValue::getMetadata);
71-
}
72-
73-
/**
74-
* Implementing classes may override this method if they need to use a particular initialization procedure.
75-
*
76-
* @param configuration Parameters that may be passed to the implementing class.
77-
*
78-
* @return {@code this} instance, initialized.
79-
*/
80-
public default Environment init(Object... configuration)
81-
{
82-
return this;
76+
return getValue(null, alias).map(DataSet.class::cast).map(DataSet::getMetadata);
8377
}
8478
}

vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/DataSetMetadata.java

-22
Original file line numberDiff line numberDiff line change
@@ -180,28 +180,6 @@ public default <R extends Component, S extends ValueDomainSubset<S, D>, D extend
180180
*/
181181
public DataSetMetadata joinForOperators(DataSetMetadata other);
182182

183-
/**
184-
* Creates a new structure by renaming a component of this {@link DataSetMetadata}.
185-
*
186-
* If a component with the new name already exists, the behaviour is undefined.
187-
*
188-
* @param component the component to rename
189-
* @param newName the new name for the component
190-
* @return the new structure.
191-
*/
192-
public DataSetMetadata rename(DataStructureComponent<?, ?, ?> component, String newName);
193-
194-
/**
195-
* Creates a new structure by pivoting the specified measure over an identifier that is defined on a string enumerated domain (codelist).
196-
*
197-
* @param <S> the domain subset type of the measure
198-
* @param <D> the domain type of the measure
199-
* @param identifier the identifier
200-
* @param measure the measure
201-
* @return the new structure.
202-
*/
203-
public <S extends ValueDomainSubset<S, D>, D extends ValueDomain> DataSetMetadata pivot(DataStructureComponent<Identifier, ?, ?> identifier, DataStructureComponent<Measure, S, D> measure);
204-
205183
/**
206184
* Extracts a singleton component of a given role if it exists in the current structure, or throws an exception otherwise.
207185
*

vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/DataStructureComponent.java

+13-4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import it.bancaditalia.oss.vtl.model.data.Component.Measure;
2727
import it.bancaditalia.oss.vtl.model.domain.ValueDomain;
2828
import it.bancaditalia.oss.vtl.model.domain.ValueDomainSubset;
29+
import it.bancaditalia.oss.vtl.session.MetadataRepository;
2930

3031
/**
3132
* The immutable representation of a component of a dataset.
@@ -79,7 +80,7 @@ public default boolean is(Class<? extends Component> role)
7980
}
8081

8182
/**
82-
* Narrows the role of this {@link DataStructureComponent} to the specified role if possible.
83+
* Convencience method that narrows the role of this {@link DataStructureComponent} to the specified role if possible.
8384
*
8485
* @param role the role to narrow to
8586
* @return this component with the narrowed role.
@@ -94,9 +95,17 @@ public default <R2 extends Component> DataStructureComponent<R2, S, D> asRole(Cl
9495
else
9596
throw new ClassCastException("In component " + this + ", cannot cast " + getRole().getSimpleName() + " to " + role.getSimpleName());
9697
}
97-
98-
public default DataStructureComponent<R, S, D> getRenamed(String newName)
98+
99+
/**
100+
* Convenience method that obtains a renamed component in the given {@link MetadataRepository} the same role and domain of this {@link DataStructureComponent}.
101+
*
102+
* @param repo The repository
103+
* @param newName the new name to assign to the new component
104+
* @return the renamed component
105+
*/
106+
@SuppressWarnings("unchecked")
107+
public default DataStructureComponent<R, S, D> getRenamed(MetadataRepository repo, String newName)
99108
{
100-
return getVariable().getRenamed(newName).as(getRole());
109+
return ((Variable<S, D>) repo.createTempVariable(newName, getVariable().getDomain())).as(getRole());
101110
}
102111
}

vtl-api/src/main/java/it/bancaditalia/oss/vtl/model/data/Variable.java

-2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,4 @@ public static String normalizeAlias(String alias)
9999
{
100100
return getDomain().cast(value);
101101
}
102-
103-
public Variable<S, D> getRenamed(String newName);
104102
}

vtl-api/src/main/java/it/bancaditalia/oss/vtl/session/MetadataRepository.java

+6-23
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,13 @@
1919
*/
2020
package it.bancaditalia.oss.vtl.session;
2121

22-
import java.util.Collection;
23-
2422
import it.bancaditalia.oss.vtl.exceptions.VTLCastException;
2523
import it.bancaditalia.oss.vtl.exceptions.VTLUnboundAliasException;
2624
import it.bancaditalia.oss.vtl.model.data.DataSetMetadata;
2725
import it.bancaditalia.oss.vtl.model.data.Variable;
28-
import it.bancaditalia.oss.vtl.model.domain.ValueDomain;
2926
import it.bancaditalia.oss.vtl.model.domain.ValueDomainSubset;
3027
import it.bancaditalia.oss.vtl.model.rules.DataPointRuleSet;
3128
import it.bancaditalia.oss.vtl.model.rules.HierarchicalRuleSet;
32-
import it.bancaditalia.oss.vtl.model.transform.TransformationScheme;
3329

3430
/**
3531
* A repository to contain and query all the defined domains.
@@ -38,11 +34,6 @@
3834
*/
3935
public interface MetadataRepository
4036
{
41-
/**
42-
* @return a collection of all {@link ValueDomainSubset}s defined in this {@link MetadataRepository}.
43-
*/
44-
public Collection<ValueDomainSubset<?, ?>> getValueDomains();
45-
4637
/**
4738
* Checks if a {@link ValueDomainSubset} with the specified name exists.
4839
*
@@ -100,22 +91,14 @@ public interface MetadataRepository
10091
* @return a {@link Variable} instance.
10192
* @throws VTLUnboundAliasException if the alias is not defined.
10293
*/
103-
public <S extends ValueDomainSubset<S, D>, D extends ValueDomain> Variable<S, D> getVariable(String alias, ValueDomainSubset<S, D> domain);
94+
public Variable<?, ?> getVariable(String alias);
10495

105-
public <S extends ValueDomainSubset<S, D>, D extends ValueDomain> Variable<S, D> getDefaultVariable(ValueDomainSubset<S, D> domain);
106-
107-
public TransformationScheme getTransformationScheme(String alias);
108-
10996
/**
110-
* Initialize this {@link MetadataRepository}.
111-
*
112-
* This method should be always called once per instance, before attempting any other operation.
97+
* Creates a temporary variable with provided alias and domain. An error is raised if a persistent variable with a different domain is already defined in metadata.
11398
*
114-
* @param params optional initialization parameters
115-
* @return this instance
99+
* @param alias the alias of the variable
100+
* @param alias the domain of the variable
101+
* @return a {@link Variable} instance.
116102
*/
117-
public default MetadataRepository init(Object... params)
118-
{
119-
return this;
120-
}
103+
public Variable<?, ?> createTempVariable(String alias, ValueDomainSubset<?, ?> domain);
121104
}

vtl-bundles/vtl-cli/src/main/java/it/bancaditalia/oss/vtl/impl/cli/VTLShell.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public Void call() throws Exception
7777
ConfigurationManagerFactory.loadConfiguration(reader);
7878
}
7979

80-
ConfigurationManager manager = ConfigurationManager.getDefault();
80+
ConfigurationManager manager = ConfigurationManagerFactory.getInstance();
8181

8282
VTLSession session;
8383
try (Reader reader = file != null ? Files.newBufferedReader(file.toPath(), UTF_8) : new BufferedReader(new InputStreamReader(System.in, UTF_8)))

vtl-bundles/vtl-coverage/src/test/java/it/bancaditalia/oss/vtl/coverage/tests/IntegrationTestSuite.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import org.junit.jupiter.params.provider.Arguments;
3737
import org.junit.jupiter.params.provider.MethodSource;
3838

39-
import it.bancaditalia.oss.vtl.config.ConfigurationManager;
39+
import it.bancaditalia.oss.vtl.config.ConfigurationManagerFactory;
4040
import it.bancaditalia.oss.vtl.impl.meta.InMemoryMetadataRepository;
4141
import it.bancaditalia.oss.vtl.impl.session.VTLSessionImpl;
4242
import it.bancaditalia.oss.vtl.model.data.DataPoint;
@@ -96,7 +96,7 @@ public void test(String testName, String testCode)
9696
{
9797
try
9898
{
99-
((InMemoryMetadataRepository) ConfigurationManager.getDefault().getMetadataRepository()).clearVariables();
99+
((InMemoryMetadataRepository) ConfigurationManagerFactory.getInstance().getMetadataRepository()).clearVariables();
100100

101101
System.out.println("------------------------------------------------------------------------------------------------");
102102
System.out.println(" " + testName);

vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/JupyterWorkspace.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import it.bancaditalia.oss.vtl.environment.Workspace;
3333
import it.bancaditalia.oss.vtl.impl.environment.WorkspaceImpl;
3434
import it.bancaditalia.oss.vtl.model.data.VTLValue;
35+
import it.bancaditalia.oss.vtl.session.MetadataRepository;
3536

3637
public class JupyterWorkspace implements Workspace
3738
{
@@ -60,7 +61,7 @@ public synchronized boolean contains(String alias)
6061
}
6162

6263
@Override
63-
public Optional<VTLValue> getValue(String alias)
64+
public Optional<VTLValue> getValue(MetadataRepository repo, String alias)
6465
{
6566
return Optional.ofNullable(values.get(alias));
6667
}

vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/VTLJupyterSession.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public VTLValue resolve(String alias)
6060
if (rule.isPresent())
6161
return acquireResult(rule.get(), alias);
6262
else
63-
return acquireValue(alias, Environment::getValue)
63+
return acquireValue(alias, (env, a) -> env.getValue(getRepository(), a))
6464
.orElseThrow(() -> new VTLUnboundAliasException(alias));
6565
}
6666

vtl-bundles/vtl-jupyter/src/main/java/it/bancaditalia/oss/vtl/impl/jupyter/VTLKernelLauncher.java

+12-11
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import static java.nio.charset.StandardCharsets.UTF_8;
2525
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
2626
import static java.util.function.Predicate.not;
27-
import static java.util.stream.Collectors.toList;
2827

2928
import java.io.BufferedReader;
3029
import java.io.File;
@@ -102,17 +101,19 @@ private void exec() throws IOException, InvalidKeyException, NoSuchAlgorithmExce
102101
ConfigurationManagerFactory.loadConfiguration(new FileReader(System.getProperty("user.home") + "/.vtlStudio.properties"));
103102
SESSION_IMPLEMENTATION.setValue(VTLJupyterSession.class.getName());
104103

105-
String workspaceClass = ConfigurationManagerFactory.getInstance().getEnvironments().stream()
106-
.filter(Workspace.class::isInstance)
107-
.map(Object::getClass)
108-
.map(Class::getName)
109-
.findAny().orElseThrow();
110-
111104
ENVIRONMENT_IMPLEMENTATION.setValues(
112-
Stream.concat(ENVIRONMENT_IMPLEMENTATION.getValues().stream(), Stream.of(JupyterWorkspace.class.getName()))
113-
.filter(not(workspaceClass::equals))
114-
.collect(toList())
115-
.toArray(new String[0]));
105+
Stream.concat(ENVIRONMENT_IMPLEMENTATION.getValues().stream()
106+
.filter(not(cls -> {
107+
try
108+
{
109+
return Workspace.class.isAssignableFrom(Class.forName(cls, true, Thread.currentThread().getContextClassLoader()));
110+
}
111+
catch (ClassNotFoundException e)
112+
{
113+
throw new ExceptionInInitializerError(e);
114+
}
115+
})),
116+
Stream.of(JupyterWorkspace.class.getName())).toArray(String[]::new));
116117

117118
new VTLJupyterKernel(connInfo);
118119
}

0 commit comments

Comments
 (0)