Compare commits

..

No commits in common. "master" and "Feature/24026" have entirely different histories.

17 changed files with 70 additions and 89 deletions

View File

@ -15,13 +15,11 @@
<attributes> <attributes>
<attribute name="optional" value="true"/> <attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes> <attributes>
<attribute name="maven.pomderived" value="true"/> <attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes> </attributes>
</classpathentry> </classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">

View File

@ -3,9 +3,6 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8 org.eclipse.jdt.core.compiler.source=1.8

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0"> <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
<wb-module deploy-name="dataminer-pool-manager-2.8.0-SNAPSHOT"> <wb-module deploy-name="dataminer-pool-manager-2.7.1-SNAPSHOT">
<wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/> <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
<wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/> <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/> <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>

View File

@ -3,9 +3,8 @@
## [v2.8.0-SNAPSHOT] ## [v2.8.0-SNAPSHOT]
- Updated jsch to 0.1.55 - Updated to gcube-smartgears-bom.2.5.0
- Updated to gcube-smartgears-bom: 2.5.1-SNAPSHOT
- Updated pom.xml to include configuration resources [#26192]
## [v2.7.1] - 2022-04-06 ## [v2.7.1] - 2022-04-06

View File

@ -1,7 +1,6 @@
<ReleaseNotes> <ReleaseNotes>
<Changeset component="org.gcube.dataanalysis.dataminer-pool-manager.2-8-0" date="2024-09-16"> <Changeset component="org.gcube.dataanalysis.dataminer-pool-manager.2-8-0" date="2023-11-09">
<Change>Updated to gcube-smartgears-bom: 2.5.1-SNAPSHOT</Change> <Change>Updated to gcube-smartgears-bom.2.5.0</Change>
<Change>Updated pom.xml to include configuration resources [#26192]</Change>
</Changeset> </Changeset>
<Changeset component="org.gcube.dataanalysis.dataminer-pool-manager.2-7-1" date="2022-04-06"> <Changeset component="org.gcube.dataanalysis.dataminer-pool-manager.2-7-1" date="2022-04-06">
<Change>Updated to gcube-smartgears-bom.2.2.0 [#23133]</Change> <Change>Updated to gcube-smartgears-bom.2.2.0 [#23133]</Change>

23
pom.xml
View File

@ -107,7 +107,7 @@
<dependency> <dependency>
<groupId>com.jcraft</groupId> <groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId> <artifactId>jsch</artifactId>
<version>0.1.55</version> <version>0.1.53</version>
</dependency> </dependency>
@ -151,7 +151,7 @@
<dependency> <dependency>
<groupId>org.gcube.distribution</groupId> <groupId>org.gcube.distribution</groupId>
<artifactId>gcube-smartgears-bom</artifactId> <artifactId>gcube-smartgears-bom</artifactId>
<version>2.5.1-SNAPSHOT</version> <version>2.5.0</version>
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
@ -191,25 +191,6 @@
</resources> </resources>
</configuration> </configuration>
</execution> </execution>
<execution>
<id>copy-config</id>
<goals>
<goal>copy-resources</goal>
</goals>
<phase>process-resources</phase>
<configuration>
<outputDirectory>${webappDirectory}/classes</outputDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resources/</directory>
<filtering>true</filtering>
<includes>
<include>*/**</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions> </executions>
</plugin> </plugin>

View File

@ -97,16 +97,16 @@ public class ClientConfigurationCache
if (repositoryPassword != null && repositoryPassword.trim() == "") repositoryPassword = null; if (repositoryPassword != null && repositoryPassword.trim() == "") repositoryPassword = null;
logger.debug("Repository username "+repositoryUsername); this.logger.debug("Repository username "+repositoryUsername);
logger.debug("Repository password "+repositoryPassword); this.logger.debug("Repository password "+repositoryPassword);
} catch (Exception e) } catch (Exception e)
{ {
this.logger.debug("SVN Username and password not present"); this.logger.debug("SVN Username and password not present");
} }
logger.debug("SVN Repository URL: "+repositoryURL); this.logger.debug("SVN Repository URL: "+repositoryURL);
logger.debug("SVN Repository path: "+repositoryPath); this.logger.debug("SVN Repository path: "+repositoryPath);
response = new SVNRepository(repositoryURL, repositoryPath,repositoryUsername, repositoryPassword); response = new SVNRepository(repositoryURL, repositoryPath,repositoryUsername, repositoryPassword);

View File

@ -30,6 +30,23 @@ public class ConfigurationImpl implements Configuration {
} }
// enum REPOSITORIES {
// REPO ("svn.repository"),
// MAIN_ALGO ("svn.algo.main.repo");
//
// private String type;
//
// private REPOSITORIES(String type) {
// this.type = type;
// }
//
// @Override
// public String toString() {
// return this.type;
// }
// }
private CONFIGURATIONS type; private CONFIGURATIONS type;
private ClientConfigurationCache cache; private ClientConfigurationCache cache;

View File

@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory;
import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNException;
public class DMPMClientConfiguratorManager { public class DMPMClientConfiguratorManager {
private final Logger logger=LoggerFactory.getLogger(DMPMClientConfiguratorManager.class); private final Logger logger;
private Properties defaultAdmins; private Properties defaultAdmins;
static DMPMClientConfiguratorManager instance; static DMPMClientConfiguratorManager instance;
@ -22,27 +22,28 @@ public class DMPMClientConfiguratorManager {
private ScopedCacheMap cacheMap; private ScopedCacheMap cacheMap;
private DMPMClientConfiguratorManager() { private DMPMClientConfiguratorManager() {
cacheMap = new ScopedCacheMap(); this.cacheMap = new ScopedCacheMap();
defaultAdmins = new Properties(); this.logger = LoggerFactory.getLogger(DMPMClientConfiguratorManager.class);
this.defaultAdmins = new Properties();
try { try {
defaultAdmins.load(this.getClass().getResourceAsStream("/default.admins")); this.defaultAdmins.load(this.getClass().getResourceAsStream("/default.admins"));
logger.debug("Default users successfully loaded"); this.logger.debug("Default users successfully loaded");
} catch (Exception e) { } catch (Exception e) {
logger.error("Unable to get default users", e); this.logger.error("Unable to get default users", e);
} }
} }
private ClientConfigurationCache getCurrentCache() { private ClientConfigurationCache getCurrentCache() {
String currentScope = ScopeProvider.instance.get(); String currentScope = ScopeProvider.instance.get();
logger.debug("Current scope = " + currentScope); this.logger.debug("Current scope = " + currentScope);
logger.debug("Getting current configuration cache"); this.logger.debug("Getting current configuration cache");
ClientConfigurationCache cache = cacheMap.get(currentScope); ClientConfigurationCache cache = this.cacheMap.get(currentScope);
if (cache == null) { if (cache == null) {
logger.debug("Cache not created yet, creating..."); this.logger.debug("Cache not created yet, creating...");
cache = new ClientConfigurationCache(); cache = new ClientConfigurationCache();
cacheMap.put(currentScope, cache); this.cacheMap.put(currentScope, cache);
} }
@ -87,8 +88,8 @@ public class DMPMClientConfiguratorManager {
public static void main(String[] args) throws IOException, SVNException { public static void main(String[] args) throws IOException, SVNException {
DMPMClientConfiguratorManager a = new DMPMClientConfiguratorManager(); DMPMClientConfiguratorManager a = new DMPMClientConfiguratorManager();
ScopeProvider.instance.set("/gcube/devsec/devVRE"); ScopeProvider.instance.set("/gcube/devNext/NextNext");
// SecurityTokenProvider.instance.set("xxx-xxx-xxx-xxx"); // SecurityTokenProvider.instance.set("708e7eb8-11a7-4e9a-816b-c9ed7e7e99fe-98187548");
System.out.println("RESULT 1" + a.getStagingConfiguration().getSVNCRANDepsList()); System.out.println("RESULT 1" + a.getStagingConfiguration().getSVNCRANDepsList());
System.out.println("RESULT 2" + a.getProductionConfiguration().getRepository()); System.out.println("RESULT 2" + a.getProductionConfiguration().getRepository());

View File

@ -9,7 +9,6 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.Configuration; import org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.Configuration;
@ -187,18 +186,9 @@ public abstract class CheckMethod {
this.logger.debug("session created."); this.logger.debug("session created.");
this.logger.debug("Session Config:");
for (Object key: sshConfig.keySet()) {
this.logger.debug("{} = {} ", key, sshConfig.get(key));
}
this.logger.debug("SSH Config: {}",sshConfig);
session.setConfig(this.sshConfig); session.setConfig(this.sshConfig);
session.connect(); session.connect();
this.logger.debug("Open Channel SFTP");
this.logger.debug("Protocol: "+SFTP_PROTOCOL);
Channel channel = session.openChannel(SFTP_PROTOCOL); Channel channel = session.openChannel(SFTP_PROTOCOL);
channel.connect(); channel.connect();
this.logger.debug("shell channel connected...."); this.logger.debug("shell channel connected....");
@ -217,7 +207,6 @@ public abstract class CheckMethod {
session.disconnect(); session.disconnect();
} catch (Exception e) } catch (Exception e)
{ {
this.logger.error("Error in deleteFiles(): {} ",e.getLocalizedMessage(),e);
throw new GenericException(e); throw new GenericException(e);
} }

View File

@ -14,10 +14,11 @@ public class SVNRepositoryManager {
private SVNRepository svnRepository; private SVNRepository svnRepository;
private static SVNRepositoryManager instance; private static SVNRepositoryManager instance;
private Logger logger=LoggerFactory.getLogger(SVNRepositoryManager.class); private Logger logger;
private SVNRepositoryManager (Configuration configuration) throws SVNException private SVNRepositoryManager (Configuration configuration) throws SVNException
{ {
this.logger = LoggerFactory.getLogger(SVNRepositoryManager.class);
org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.SVNRepository repository = configuration.getSVNRepository(); org.gcube.dataanalysis.dataminer.poolmanager.clients.configuration.SVNRepository repository = configuration.getSVNRepository();
this.svnRepository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(repository.getBaseUrl())); this.svnRepository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(repository.getBaseUrl()));
ISVNAuthenticationManager authManager = null; ISVNAuthenticationManager authManager = null;

View File

@ -45,11 +45,12 @@ public abstract class SVNUpdater {
private SVNRepository svnRepository; private SVNRepository svnRepository;
private Configuration configuration; private Configuration configuration;
private Logger logger=LoggerFactory.getLogger(SVNUpdater.class); private Logger logger;
public SVNUpdater(Configuration configuration) throws SVNException { public SVNUpdater(Configuration configuration) throws SVNException {
this.configuration = configuration; this.configuration = configuration;
this.svnRepository = SVNRepositoryManager.getInstance(configuration).getSvnRepository(); this.svnRepository = SVNRepositoryManager.getInstance(configuration).getSvnRepository();
this.logger = LoggerFactory.getLogger(SVNUpdater.class);
} }
// public void updateRPRotoDeps(Algorithm algorithm) { // public void updateRPRotoDeps(Algorithm algorithm) {
@ -71,7 +72,7 @@ public abstract class SVNUpdater {
private String getDependencyFile (Configuration configuration, String language) private String getDependencyFile (Configuration configuration, String language)
{ {
logger.debug("Getting dependency file for language "+language); this.logger.debug("Getting dependency file for language "+language);
switch (language) switch (language)
{ {
@ -122,7 +123,7 @@ public abstract class SVNUpdater {
private void updateAlgorithmList(String svnMainAlgoRepo, File algorithmsFile) throws SVNException, SVNCommitException private void updateAlgorithmList(String svnMainAlgoRepo, File algorithmsFile) throws SVNException, SVNCommitException
{ {
logger.debug("Adding .jar file: " + algorithmsFile + " to repository " + svnMainAlgoRepo); this.logger.debug("Adding .jar file: " + algorithmsFile + " to repository " + svnMainAlgoRepo);
try try
{ {
@ -136,7 +137,7 @@ public abstract class SVNUpdater {
} }
catch (FileNotFoundException e) catch (FileNotFoundException e)
{ {
logger.error("Temporary algorithm file not found: this exception should not happen",e); this.logger.error("Temporary algorithm file not found: this exception should not happen",e);
} }
finally finally
{ {
@ -148,7 +149,7 @@ public abstract class SVNUpdater {
public void putFile(FileInputStream fileInputSreeam, String destinationFolder, String fileName) throws SVNException, SVNCommitException public void putFile(FileInputStream fileInputSreeam, String destinationFolder, String fileName) throws SVNException, SVNCommitException
{ {
logger.debug("Putting new file on the SVN repository"); this.logger.debug("Putting new file on the SVN repository");
final ISVNEditor commitEditor = svnRepository.getCommitEditor("Add algorithm to list", null); final ISVNEditor commitEditor = svnRepository.getCommitEditor("Add algorithm to list", null);
commitEditor.openRoot(-1); commitEditor.openRoot(-1);
commitEditor.openDir(destinationFolder, -1); commitEditor.openDir(destinationFolder, -1);
@ -165,17 +166,17 @@ public abstract class SVNUpdater {
if (errorMessage != null) if (errorMessage != null)
{ {
logger.error("Operation failed: "+errorMessage.getFullMessage()); this.logger.error("Operation failed: "+errorMessage.getFullMessage());
throw new SVNCommitException(errorMessage,fileName); throw new SVNCommitException(errorMessage,fileName);
} }
logger.debug("Operation completed"); this.logger.debug("Operation completed");
} }
public void updateFile(FileInputStream fileInputStream, String destinationFolder, String fileName) throws SVNException, SVNCommitException { public void updateFile(FileInputStream fileInputStream, String destinationFolder, String fileName) throws SVNException, SVNCommitException {
logger.debug("Updating existing file on the SVN repository"); this.logger.debug("Updating existing file on the SVN repository");
final ISVNEditor commitEditor = svnRepository.getCommitEditor("Updating algorithm", null); final ISVNEditor commitEditor = svnRepository.getCommitEditor("Updating algorithm", null);
commitEditor.openRoot(-1); commitEditor.openRoot(-1);
commitEditor.openDir(destinationFolder, -1); commitEditor.openDir(destinationFolder, -1);
@ -196,12 +197,12 @@ public abstract class SVNUpdater {
if (errorMessage != null) if (errorMessage != null)
{ {
logger.error("Operation failed: "+errorMessage.getFullMessage()); this.logger.error("Operation failed: "+errorMessage.getFullMessage());
throw new SVNCommitException(errorMessage,fileName+" to be updated"); throw new SVNCommitException(errorMessage,fileName+" to be updated");
} }
logger.debug("Operation completed"); this.logger.debug("Operation completed");
} }
@ -230,7 +231,7 @@ public abstract class SVNUpdater {
boolean response = false; boolean response = false;
try { try {
logger.debug("Updating algorithm list: " + file); this.logger.debug("Updating algorithm list: " + file);
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream); svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream);
String lines[] = byteArrayOutputStream.toString().split("\\r?\\n"); String lines[] = byteArrayOutputStream.toString().split("\\r?\\n");
@ -276,7 +277,7 @@ public abstract class SVNUpdater {
if (errorMessage != null) if (errorMessage != null)
{ {
logger.error("Operation failed: "+errorMessage.getFullMessage()); this.logger.error("Operation failed: "+errorMessage.getFullMessage());
response = false; response = false;
} }
else response = true; else response = true;
@ -285,7 +286,7 @@ public abstract class SVNUpdater {
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.error("Unable to commit algorithm list",ex); this.logger.error("Unable to commit algorithm list",ex);
response = false; response = false;
} }
@ -313,7 +314,7 @@ public abstract class SVNUpdater {
sb.append("none | "); sb.append("none | ");
sb.append(this.getTimeZone() + " | "); sb.append(this.getTimeZone() + " | ");
logger.info("Algo details: "+sb.toString()); this.logger.info("Algo details: "+sb.toString());
return sb.toString(); return sb.toString();
} }
@ -336,7 +337,7 @@ public abstract class SVNUpdater {
} }
logger.debug("Checking dependencies list: " + file); this.logger.debug("Checking dependencies list: " + file);
List<String> validDependencies = new LinkedList<String>(); List<String> validDependencies = new LinkedList<String>();
@ -350,7 +351,7 @@ public abstract class SVNUpdater {
validDependencies.add(l.trim()); validDependencies.add(l.trim());
}} }}
logger.debug("Valid dependencies are: "+validDependencies); this.logger.debug("Valid dependencies are: "+validDependencies);
for(Dependency d: deps){ for(Dependency d: deps){
String depName = d.getName(); String depName = d.getName();
if(!validDependencies.contains(depName)){ if(!validDependencies.contains(depName)){
@ -409,7 +410,6 @@ public abstract class SVNUpdater {
// return check; // return check;
} catch (SVNException e) } catch (SVNException e)
{ {
logger.error(e.getLocalizedMessage(),e);
throw new GenericException(e); throw new GenericException(e);
} }
@ -423,7 +423,7 @@ public abstract class SVNUpdater {
boolean check = false; boolean check = false;
try { try {
logger.info("Checking dependencies list: " + file); this.logger.info("Checking dependencies list: " + file);
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream); svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream);
String lines[] = byteArrayOutputStream.toString().split("\\r?\\n"); String lines[] = byteArrayOutputStream.toString().split("\\r?\\n");
@ -454,7 +454,7 @@ public abstract class SVNUpdater {
// } // }
} catch (Exception a) } catch (Exception a)
{ {
logger.error(a.getMessage(),a); this.logger.error(a.getMessage(),a);
} }
@ -464,7 +464,7 @@ public abstract class SVNUpdater {
public void updateSVN(String file, Collection<Dependency> deps) { public void updateSVN(String file, Collection<Dependency> deps) {
try { try {
logger.info("Updating dependencies list: " + file); this.logger.info("Updating dependencies list: " + file);
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream); svnRepository.getFile(file, SVNRepository.INVALID_REVISION, null, byteArrayOutputStream);
@ -543,7 +543,7 @@ public abstract class SVNUpdater {
Date fromDate = formatter.parse(cal.getTime().toString()); Date fromDate = formatter.parse(cal.getTime().toString());
TimeZone central = TimeZone.getTimeZone("UTC"); TimeZone central = TimeZone.getTimeZone("UTC");
formatter.setTimeZone(central); formatter.setTimeZone(central);
logger.info(formatter.format(fromDate)); this.logger.info(formatter.format(fromDate));
return formatter.format(fromDate); return formatter.format(fromDate);
} }

View File

@ -6,7 +6,7 @@ svn.algo.main.repo = /trunk/data-analysis/DataMinerConfiguration/algorithms
#STAGE #STAGE
STAGE_GHOST = dataminer-ghost.cloud-dev.d4science.org STAGE_GHOST = dataminer-ghost-d.dev.d4science.org
svn.stage.algorithms-list = /trunk/data-analysis/DataMinerConfiguration/algorithms/dev/algorithms svn.stage.algorithms-list = /trunk/data-analysis/DataMinerConfiguration/algorithms/dev/algorithms
svn.stage.deps-linux-compiled = /trunk/data-analysis/RConfiguration/RPackagesManagement/r_deb_pkgs.txt svn.stage.deps-linux-compiled = /trunk/data-analysis/RConfiguration/RPackagesManagement/r_deb_pkgs.txt

View File

@ -1,4 +1,4 @@
dependencies: dependencies:
# - { role: gcube-dataminer } # - { role: gcube-dataminer }
# - { role: os-unzip } # - { role: os-unzip }
# - { role: os-java-1.8.0 } # - { role: os-java-1.7.0 }

View File

@ -1,7 +1,7 @@
--- ---
- name: adding OS Package java-1.8.0 - name: adding OS Package java-1.7.0
package: package:
name: java-1.8.0-openjdk name: java-1.7.0-openjdk
state: "{{os_package_state}}" state: "{{os_package_state}}"
become: true become: true

View File

@ -3,4 +3,3 @@
/changelog.xml /changelog.xml
/gcube-app.xml /gcube-app.xml
/profile.xml /profile.xml
/classes/

View File

@ -24,7 +24,7 @@ public class SVNTests {
//algo.setClazz(algo.getClazz() + "TEST"); //algo.setClazz(algo.getClazz() + "TEST");
algo.setAlgorithmType("transducerers"); algo.setAlgorithmType("transducerers");
algo.setCategory("NLP"); algo.setCategory("NLP");
algo.setFullname("Master Test"); algo.setFullname("Ondřej Košarko");
//System.out.println(algo.getCategory()); //System.out.println(algo.getCategory());
//System.out.println(algo.getSkipJava()); //System.out.println(algo.getSkipJava());