no message

This commit is contained in:
Ioannis Kalyvas 2018-05-14 09:44:35 +03:00
parent 651c7bb0f5
commit cc5e080219
103 changed files with 4775 additions and 3442 deletions

4
.gitignore vendored
View File

@ -21,3 +21,7 @@ dmp-frontend/new 3.xml
dmp-backend/src/main/ui-resources/static/ dmp-backend/src/main/ui-resources/static/
dmp-backend/web/target/ dmp-backend/web/target/
*.class *.class
dmp-backend/web/src/main/ui-resources/static/
dmp-backend/data/target/data-1.0-SNAPSHOT.jar
dmp-backend/data/target/
dmp-backend/queryable/target/

View File

@ -7,6 +7,7 @@
<groupId>eu.eudat</groupId> <groupId>eu.eudat</groupId>
<artifactId>data</artifactId> <artifactId>data</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent> <parent>
<groupId>eu.eudat</groupId> <groupId>eu.eudat</groupId>

View File

@ -3,7 +3,7 @@ package eu.eudat.data.dao.criteria;
import eu.eudat.queryable.queryableentity.DataEntity; import eu.eudat.queryable.queryableentity.DataEntity;
public abstract class Criteria<T extends DataEntity> { public abstract class Criteria<T> {
private String like; private String like;
public String getLike() { public String getLike() {

View File

@ -5,7 +5,8 @@
<groupId>eu.eudat</groupId> <groupId>eu.eudat</groupId>
<artifactId>dmp-backend</artifactId> <artifactId>dmp-backend</artifactId>
<version>1.0.0-SNAPSHOT</version> <version>1.0.0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging> <packaging>pom</packaging>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
@ -15,12 +16,15 @@
<modules> <modules>
<module>queryable</module> <module>queryable</module>
<module>web</module> <module>web</module>
<module>data</module>
</modules> </modules>
<properties> <properties>
<project.http.version>1.19.0</project.http.version> <project.http.version>1.19.0</project.http.version>
<project.oauth.version>1.19.0</project.oauth.version> <project.oauth.version>1.19.0</project.oauth.version>
<project.version>0.2.0</project.version> <project.version>0.2.0</project.version>
<java.version>1.8</java.version>
<dmp-backend-commons.version>0.0.1-SNAPSHOT</dmp-backend-commons.version> <dmp-backend-commons.version>0.0.1-SNAPSHOT</dmp-backend-commons.version>
<org.springframework.version>4.3.8.RELEASE</org.springframework.version> <org.springframework.version>4.3.8.RELEASE</org.springframework.version>
@ -51,7 +55,15 @@
<artifactId>json</artifactId> <artifactId>json</artifactId>
<version>20160810</version> <version>20160810</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.hibernate</groupId> <groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId> <artifactId>hibernate-core</artifactId>
@ -84,11 +96,7 @@
<artifactId>jackson-dataformat-xml</artifactId> <artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.3</version> <version>2.9.3</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency> <dependency>
@ -106,97 +114,7 @@
<!-- g/a spring --> <!-- g/a spring -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<!-- guava eu.eudat.cache -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<!-- facebook Login -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<!-- linkedin Login -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-linkedin</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
<!-- tweeter login-->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-twitter</artifactId>
<version>1.1.2.RELEASE</version>
</dependency>
<!-- Various libs --> <!-- Various libs -->
<dependency> <dependency>
@ -255,42 +173,6 @@
</dependencies> </dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>
<resource>
<directory>src/main/ui-resources</directory>
<excludes>
<exclude>node_modules/**</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
<profiles> <profiles>
<profile> <profile>
@ -322,4 +204,5 @@
</activation> </activation>
</profile> </profile>
</profiles> </profiles>
</project> </project>

View File

@ -7,6 +7,7 @@
<groupId>dmp-backend</groupId> <groupId>dmp-backend</groupId>
<artifactId>queryable</artifactId> <artifactId>queryable</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent> <parent>
<groupId>eu.eudat</groupId> <groupId>eu.eudat</groupId>

View File

@ -7,6 +7,7 @@
<groupId>dmp-backend</groupId> <groupId>dmp-backend</groupId>
<artifactId>web</artifactId> <artifactId>web</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging>
<parent> <parent>
<groupId>eu.eudat</groupId> <groupId>eu.eudat</groupId>
@ -25,5 +26,118 @@
<artifactId>queryable</artifactId> <artifactId>queryable</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<!-- guava eu.eudat.cache -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
<!-- facebook Login -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<!-- linkedin Login -->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-linkedin</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
<!-- tweeter login-->
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-twitter</artifactId>
<version>1.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
</dependencies> </dependencies>
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<resources>
<resource>
<directory>src/main/ui-resources</directory>
<excludes>
<exclude>node_modules/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<properties>
<start-class>eu.eudat.EuDatApplication</start-class>
</properties>
</project> </project>

View File

@ -29,7 +29,7 @@ public class CommonController {
@RequestMapping(method = RequestMethod.GET, value = {"/language"}, produces = "application/json") @RequestMapping(method = RequestMethod.GET, value = {"/language"}, produces = "application/json")
public @ResponseBody public @ResponseBody
ResponseEntity<ResponseItem<List<Language>>> getPaged(Principal principal) { ResponseEntity<ResponseItem<List<Language>>> getPaged() {
try { try {
List<Language> language = this.dynamicProjectConfiguration.getConfiguration().getMainExternalField().getLanguage(); List<Language> language = this.dynamicProjectConfiguration.getConfiguration().getMainExternalField().getLanguage();
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<Language>>().status(ApiMessageCode.NO_MESSAGE).payload(language)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<Language>>().status(ApiMessageCode.NO_MESSAGE).payload(language));

View File

@ -1,8 +1,10 @@
package eu.eudat.controllers; package eu.eudat.controllers;
import eu.eudat.data.dao.criteria.RequestItem;
import eu.eudat.managers.DatasetProfileManager; import eu.eudat.managers.DatasetProfileManager;
import eu.eudat.managers.UserManager; import eu.eudat.managers.UserManager;
import eu.eudat.models.components.commons.datafield.AutoCompleteData; import eu.eudat.models.components.commons.datafield.AutoCompleteData;
import eu.eudat.models.helpermodels.Tuple;
import eu.eudat.models.helpers.common.AutoCompleteLookupItem; import eu.eudat.models.helpers.common.AutoCompleteLookupItem;
import eu.eudat.models.helpers.responses.ResponseItem; import eu.eudat.models.helpers.responses.ResponseItem;
import eu.eudat.models.properties.PropertiesModel; import eu.eudat.models.properties.PropertiesModel;
@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@ -64,14 +67,12 @@ public class DatasetProfileController extends BaseController {
} }
@RequestMapping(method = RequestMethod.POST, value = {"/search/autocomplete"}, consumes = "application/json", produces = "application/json") @RequestMapping(method = RequestMethod.POST, value = {"/search/autocomplete"}, consumes = "application/json", produces = "application/json")
public ResponseEntity<Object> getDataForAutocomplete(@RequestBody AutoCompleteLookupItem lookupItem) { public ResponseEntity<Object> getDataForAutocomplete(@RequestBody RequestItem<AutoCompleteLookupItem> lookupItem) {
try { try {
eu.eudat.data.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getProfileID())); eu.eudat.data.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getCriteria().getProfileID()));
eu.eudat.models.entities.xmlmodels.datasetprofiledefinition.Field modelfield = DatasetProfileManager.queryForField(dataset.getProfile().getDefinition(), lookupItem.getFieldID()); eu.eudat.models.entities.xmlmodels.datasetprofiledefinition.Field modelfield = DatasetProfileManager.queryForField(dataset.getProfile().getDefinition(), lookupItem.getCriteria().getFieldID());
AutoCompleteData data = (AutoCompleteData) modelfield.getData(); AutoCompleteData data = (AutoCompleteData) modelfield.getData();
List<Tuple<String, String>> items = DatasetProfileManager.getAutocomplete(data,lookupItem.getCriteria().getLike());
RestTemplate restTemplate = new RestTemplate();
Map<String, Object> items = restTemplate.getForObject(data.getUrl() + "?query=" + lookupItem.getSearchTerm(), Map.class);
return ResponseEntity.status(HttpStatus.OK).body(items); return ResponseEntity.status(HttpStatus.OK).body(items);
} catch (Exception ex) { } catch (Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: " + ex.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: " + ex.getMessage());

View File

@ -1,6 +1,8 @@
package eu.eudat.controllers.controllerhandler; package eu.eudat.controllers.controllerhandler;
import eu.eudat.models.errormodels.ValidationErrorContext; import eu.eudat.models.errormodels.ValidationErrorContext;
import eu.eudat.models.helpers.responses.ResponseItem;
import eu.eudat.types.ApiMessageCode;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
@ -30,14 +32,14 @@ public class ControllerErrorHandler {
@ExceptionHandler(MethodArgumentNotValidException.class) @ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody @ResponseBody
public ValidationErrorContext processValidationError(MethodArgumentNotValidException ex) { public ResponseItem<ValidationErrorContext> processValidationError(MethodArgumentNotValidException ex) {
BindingResult result = ex.getBindingResult(); BindingResult result = ex.getBindingResult();
List<FieldError> fieldErrors = result.getFieldErrors(); List<FieldError> fieldErrors = result.getFieldErrors();
return processFieldErrors(fieldErrors); return processFieldErrors(fieldErrors);
} }
private ValidationErrorContext processFieldErrors(List<FieldError> fieldErrors) { private ResponseItem<ValidationErrorContext> processFieldErrors(List<FieldError> fieldErrors) {
ValidationErrorContext dto = new ValidationErrorContext(); ValidationErrorContext dto = new ValidationErrorContext();
for (FieldError fieldError : fieldErrors) { for (FieldError fieldError : fieldErrors) {
@ -45,7 +47,7 @@ public class ControllerErrorHandler {
dto.addFieldError(fieldError.getField(), localizedErrorMessage); dto.addFieldError(fieldError.getField(), localizedErrorMessage);
} }
return dto; return new ResponseItem<ValidationErrorContext>().status(ApiMessageCode.VALIDATION_MESSAGE).payload(dto);
} }
private String resolveLocalizedErrorMessage(FieldError fieldError) { private String resolveLocalizedErrorMessage(FieldError fieldError) {

View File

@ -5,6 +5,7 @@ import eu.eudat.dynamicproject.entities.Property;
import eu.eudat.models.dynamicfields.Dependency; import eu.eudat.models.dynamicfields.Dependency;
import eu.eudat.models.dynamicfields.DynamicField; import eu.eudat.models.dynamicfields.DynamicField;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -17,10 +18,12 @@ import java.util.LinkedList;
import java.util.List; import java.util.List;
/** /**
* Created by ikalyvas on 3/23/2018. * Created by ikalyvas on 5/4/2018.
*/ */
@Service("dynamicProjectConfiguration") @Service("dynamicProjectConfiguration")
public class DynamicProjectConfigurationImpl implements DynamicProjectConfiguration { @Profile("devel")
public class DynamicProjectConfigurationDevelImpl implements DynamicProjectConfiguration {
private Configuration configuration; private Configuration configuration;
@ -29,7 +32,7 @@ public class DynamicProjectConfigurationImpl implements DynamicProjectConfigurat
private Environment environment; private Environment environment;
@Autowired @Autowired
public DynamicProjectConfigurationImpl(Environment environment) { public DynamicProjectConfigurationDevelImpl(Environment environment) {
this.environment = environment; this.environment = environment;
} }

View File

@ -0,0 +1,90 @@
package eu.eudat.dynamicproject;
import eu.eudat.dynamicproject.entities.Configuration;
import eu.eudat.dynamicproject.entities.Property;
import eu.eudat.models.dynamicfields.Dependency;
import eu.eudat.models.dynamicfields.DynamicField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.LinkedList;
import java.util.List;
/**
* Created by ikalyvas on 3/23/2018.
*/
@Service("dynamicProjectConfiguration")
@Profile("production")
public class DynamicProjectConfigurationProdImpl implements DynamicProjectConfiguration {
private Configuration configuration;
private List<DynamicField> fields;
private Environment environment;
@Autowired
public DynamicProjectConfigurationProdImpl(Environment environment) {
this.environment = environment;
}
@Override
public Configuration getConfiguration() {
if (this.configuration != null) return this.configuration;
String fileUrl = this.environment.getProperty("configuration.dynamicProjectUrl");
System.out.println("Loaded also config file: " + fileUrl);
String current = null;
InputStream is = null;
try {
current = new java.io.File(".").getCanonicalPath();
JAXBContext jaxbContext = JAXBContext.newInstance(Configuration.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
is = new URL("file:///" + System.getenv("CATALINA_HOME") + fileUrl).openStream();
this.configuration = (Configuration) jaxbUnmarshaller.unmarshal(is);
} catch (Exception ex) {
ex.printStackTrace();
System.out.println("Cannot find in folder" + current);
} finally {
try {
if (is != null) is.close();
} catch (IOException e) {
System.out.println("Warning: Could not close a stream after reading from file: " + fileUrl);
}
}
return this.configuration;
}
@Override
public List<DynamicField> getFields() {
if (this.fields != null) return this.fields;
Configuration configuration = this.getConfiguration();
List<DynamicField> fields = new LinkedList<>();
List<Property> properties = configuration.getConfigurationProperties();
properties.stream().forEach(item -> {
DynamicField dynamicField = new DynamicField();
dynamicField.setId(item.getId());
dynamicField.setName(item.getName());
dynamicField.setQueryProperty(item.getQueryProperty());
dynamicField.setRequired(item.getRequired());
List<Dependency> dependencies = new LinkedList<>();
item.getDependencies().stream().forEach(dependency -> {
Dependency modelDependency = new Dependency();
modelDependency.setId(dependency.getId());
modelDependency.setQueryProperty(dependency.getQueryProperty());
dependencies.add(modelDependency);
});
dynamicField.setDependencies(dependencies);
fields.add(dynamicField);
});
this.fields = fields;
return fields;
}
}

View File

@ -1,22 +1,31 @@
package eu.eudat.managers; package eu.eudat.managers;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import eu.eudat.builders.model.models.DataTableDataBuilder; import eu.eudat.builders.model.models.DataTableDataBuilder;
import eu.eudat.data.dao.entities.DatasetProfileDao; import eu.eudat.data.dao.entities.DatasetProfileDao;
import eu.eudat.data.entities.DatasetProfile; import eu.eudat.data.entities.DatasetProfile;
import eu.eudat.models.entities.xmlmodels.datasetprofiledefinition.Field;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteItem;
import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileAutocompleteRequest; import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileAutocompleteRequest;
import eu.eudat.models.datasetprofile.DatasetProfileListingModel;
import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem;
import eu.eudat.models.components.commons.datafield.AutoCompleteData;
import eu.eudat.models.datasetprofile.DatasetProfileAutocompleteItem;
import eu.eudat.models.datasetprofile.DatasetProfileListingModel;
import eu.eudat.models.entities.xmlmodels.datasetprofiledefinition.Field;
import eu.eudat.models.helpermodels.Tuple;
import eu.eudat.models.helpers.common.DataTableData; import eu.eudat.models.helpers.common.DataTableData;
import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.QueryableList;
import eu.eudat.services.ApiContext; import eu.eudat.services.ApiContext;
import eu.eudat.utilities.builders.XmlBuilder; import eu.eudat.utilities.builders.XmlBuilder;
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import javax.xml.xpath.*; import javax.xml.xpath.*;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
public class DatasetProfileManager { public class DatasetProfileManager {
@ -52,4 +61,20 @@ public class DatasetProfileManager {
return field; return field;
} }
public static List<Tuple<String, String>> getAutocomplete(AutoCompleteData data, String like) {
List<Tuple<String, String>> result = new LinkedList<>();
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.valueOf("application/vnd.api+json; charset=utf-8")));
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<>("parameters", headers);
ResponseEntity<Object> response = restTemplate.exchange(data.getUrl() + "?search=" + like, HttpMethod.GET, entity, Object.class);
DocumentContext jsonContext = JsonPath.parse(response.getBody());
List<Map<String, String>> jsonItems = jsonContext.read(data.getOptionsRoot() + "['" + data.getAutoCompleteOptions().getLabel() + "','" + data.getAutoCompleteOptions().getValue() + "']");
jsonItems.forEach(item -> result.add(new Tuple<>(item.get(data.getAutoCompleteOptions().getValue()), item.get(data.getAutoCompleteOptions().getLabel()))));
return result;
}
} }

View File

@ -8,8 +8,17 @@ import java.util.Map;
public class AutoCompleteData extends ComboBoxData<AutoCompleteData> { public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
private String url; private String url;
private Option autoCompleteOptions; private Option autoCompleteOptions;
private String optionsRoot;
public String getOptionsRoot() {
return optionsRoot;
}
public void setOptionsRoot(String optionsRoot) {
this.optionsRoot = optionsRoot;
}
public String getUrl() { public String getUrl() {
return url; return url;
} }
@ -31,6 +40,7 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
Element root = super.toXml(doc); Element root = super.toXml(doc);
root.setAttribute("url", this.url); root.setAttribute("url", this.url);
root.setAttribute("optionsRoot", this.optionsRoot);
Element element = doc.createElement("option"); Element element = doc.createElement("option");
element.setAttribute("label", this.autoCompleteOptions.getLabel()); element.setAttribute("label", this.autoCompleteOptions.getLabel());
element.setAttribute("value", autoCompleteOptions.getValue()); element.setAttribute("value", autoCompleteOptions.getValue());
@ -42,6 +52,7 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
public AutoCompleteData fromXml(Element item) { public AutoCompleteData fromXml(Element item) {
super.fromXml(item); super.fromXml(item);
this.url = item.getAttribute("url"); this.url = item.getAttribute("url");
this.optionsRoot = item.getAttribute("optionsRoot");
Element optionElement = (Element) item.getElementsByTagName("option").item(0); Element optionElement = (Element) item.getElementsByTagName("option").item(0);
if (optionElement != null) { if (optionElement != null) {
this.autoCompleteOptions = new Option(); this.autoCompleteOptions = new Option();
@ -57,7 +68,8 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
this.autoCompleteOptions = new Option(); this.autoCompleteOptions = new Option();
if (data != null) { if (data != null) {
this.url = (String) ((Map<String, Object>) data).get("url"); this.url = (String) ((Map<String, Object>) data).get("url");
Map<String, String> options = ((Map<String, Map<String, String>>) data).get("option"); this.optionsRoot = (String) ((Map<String, Object>) data).get("optionsRoot");
Map<String, String> options = ((Map<String, Map<String, String>>) data).get("autoCompleteOptions");
if (options != null) { if (options != null) {
this.autoCompleteOptions.setLabel(options.get("label")); this.autoCompleteOptions.setLabel(options.get("label"));
this.autoCompleteOptions.setValue(options.get("value")); this.autoCompleteOptions.setValue(options.get("value"));

View File

@ -1,9 +1,10 @@
package eu.eudat.models.helpers.common; package eu.eudat.models.helpers.common;
public class AutoCompleteLookupItem { import eu.eudat.data.dao.criteria.Criteria;
public class AutoCompleteLookupItem extends Criteria<AutoCompleteLookupItem>{
private String profileID; private String profileID;
private String fieldID; private String fieldID;
private String searchTerm;
public String getProfileID() { public String getProfileID() {
return profileID; return profileID;
@ -21,11 +22,4 @@ public class AutoCompleteLookupItem {
this.fieldID = fieldID; this.fieldID = fieldID;
} }
public String getSearchTerm() {
return searchTerm;
}
public void setSearchTerm(String searchTerm) {
this.searchTerm = searchTerm;
}
} }

View File

@ -3,8 +3,8 @@ package eu.eudat.models.user.components.datasetprofile;
import eu.eudat.models.components.commons.Multiplicity; import eu.eudat.models.components.commons.Multiplicity;
import eu.eudat.models.properties.PropertiesGenerator; import eu.eudat.models.properties.PropertiesGenerator;
import eu.eudat.models.user.composite.PropertiesModelBuilder; import eu.eudat.models.user.composite.PropertiesModelBuilder;
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
import eu.eudat.utilities.builders.ModelBuilder; import eu.eudat.utilities.builders.ModelBuilder;
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -79,6 +79,7 @@ public class FieldSet implements Comparable, PropertiesModelBuilder, ViewStyleDe
} }
public List<FieldSet> getMultiplicityItems() { public List<FieldSet> getMultiplicityItems() {
if (multiplicityItems != null) Collections.sort(multiplicityItems);
return multiplicityItems; return multiplicityItems;
} }

View File

@ -29,6 +29,7 @@ public class Section implements Comparable, ViewStyleDefinition<eu.eudat.models.
} }
public List<FieldSet> getCompositeFields() { public List<FieldSet> getCompositeFields() {
Collections.sort(compositeFields);
return compositeFields; return compositeFields;
} }

View File

@ -31,7 +31,7 @@ public class DevelConfigLoader implements ConfigLoader {
JAXBContext jaxbContext = JAXBContext.newInstance(ExternalUrls.class); JAXBContext jaxbContext = JAXBContext.newInstance(ExternalUrls.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
is = new URL("file:///C:/Users/ikalyvas/Documents/OpenAIRE-EUDAT-DMP-service-pilot/dmp-backend/src/main/resources/ExternalUrls.xml").openStream(); is = new URL("file:///C:/Users/ikalyvas/Documents/OpenAIRE-EUDAT-DMP-service-pilot/dmp-backend/web/src/main/resources/ExternalUrls.xml").openStream();
externalUrls = (ExternalUrls) jaxbUnmarshaller.unmarshal(is); externalUrls = (ExternalUrls) jaxbUnmarshaller.unmarshal(is);
} catch (Exception ex) { } catch (Exception ex) {

View File

@ -1,7 +1,7 @@
package eu.eudat.types; package eu.eudat.types;
public enum ApiMessageCode { public enum ApiMessageCode {
NO_MESSAGE(0), SUCCESS_MESSAGE(200), WARN_MESSAGE(300), ERROR_MESSAGE(400), DEFAULT_ERROR_MESSAGE(444); NO_MESSAGE(0), SUCCESS_MESSAGE(200), WARN_MESSAGE(300), ERROR_MESSAGE(400), DEFAULT_ERROR_MESSAGE(444),VALIDATION_MESSAGE(445);;
private Integer value; private Integer value;

View File

@ -16,7 +16,7 @@ public class ProjectTableRequestValidator implements Validator {
@Override @Override
public void validate(Object obj, Errors errors) { public void validate(Object obj, Errors errors) {
ProjectTableRequest projectTableRequest = (ProjectTableRequest) obj; ProjectTableRequest projectTableRequest = (ProjectTableRequest) obj;
if (projectTableRequest.getCriteria() != null && projectTableRequest.getCriteria().getPeriodEnd() != null && projectTableRequest.getCriteria().getPeriodEnd() != null && projectTableRequest.getCriteria().getPeriodEnd().before(projectTableRequest.getCriteria().getPeriodStart())) { if (projectTableRequest.getCriteria() != null && projectTableRequest.getCriteria().getPeriodEnd() != null && projectTableRequest.getCriteria().getPeriodStart() != null && projectTableRequest.getCriteria().getPeriodEnd().before(projectTableRequest.getCriteria().getPeriodStart())) {
errors.rejectValue("criteria.periodStart", "projectTableRequest.periodStart.overlapping"); errors.rejectValue("criteria.periodStart", "projectTableRequest.periodStart.overlapping");
} }
if (projectTableRequest.getOffset() < 0) { if (projectTableRequest.getOffset() < 0) {

View File

@ -16,6 +16,8 @@ production.database.password=dmpt00lu$r
###################Allowed Proxy Service Host ############################ ###################Allowed Proxy Service Host ############################
eu.eudat.proxy.allowed.host=https://eestore.paas2.uninett.no eu.eudat.proxy.allowed.host=https://eestore.paas2.uninett.no
configuration.externalUrls=/classes/ExternalUrls.xml configuration.externalUrls=/classes/ExternalUrls.xml
configuration.dynamicProjectUrl=/classes/ProjectConfiguration.xml
####################################################### #######################################################
########################/Email############################# ########################/Email#############################
spring.mail.default-encoding=UTF-8 spring.mail.default-encoding=UTF-8

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{ {
"name": "forms-cli", "name": "forms-cli",
"version": "0.0.0", "version": "0.0.0",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
@ -33,7 +33,7 @@
"zone.js": "^0.8.17" "zone.js": "^0.8.17"
}, },
"devDependencies": { "devDependencies": {
"@angular/cli": "1.6.1", "@angular/cli": "1.7.4",
"@angular/compiler-cli": "^5.1.1", "@angular/compiler-cli": "^5.1.1",
"@angular/language-service": "^5.1.1", "@angular/language-service": "^5.1.1",
"@types/node": "^8.5.1", "@types/node": "^8.5.1",

View File

@ -1 +1,32 @@
about <div class="container">
<div class="row">
<div class="col-md-12">
<h1>{{ 'ABOUT.TITLE' | translate}}</h1>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3>{{ 'ABOUT.MAIN-CONTENT'| translate}}</h3>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h1>{{ 'ABOUT.CONTRIBUTORS'| translate}}</h1>
</div>
</div>
<div class="row">
<div class="col-md-5">
</div>
<div class="col-md-1">
<img src="/assets/images/logo_cite.png">
</div>
<div class="col-md-1">
<img src="/assets/images/logo_cite.png">
</div>
<div class="col-md-5">
</div>
</div>
</div>

View File

@ -0,0 +1,8 @@
h1{
text-align: center;
}
img{
height: 150px;
width: 100%;
}

View File

@ -4,8 +4,8 @@ import { Component, OnInit, Inject } from "@angular/core";
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Params, ActivatedRoute, Router } from '@angular/router'; import { Params, ActivatedRoute, Router } from '@angular/router';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { ResearcherModel } from '@app/models/researcher/ResearcherModel'; import { ResearcherModel } from '../models/researcher/ResearcherModel';
import { ResearcherService } from '@app/services/researchers/researchers.service'; import { ResearcherService } from '../services/researchers/researchers.service';
@Component({ @Component({
selector: 'add-researchers-component', selector: 'add-researchers-component',

View File

@ -5,7 +5,7 @@ import { RouterModule, Routes } from '@angular/router';
import { HomepageComponent } from './homepage/homepage.component'; import { HomepageComponent } from './homepage/homepage.component';
import { AuthGuard } from './guards/auth.guard'; import { AuthGuard } from './guards/auth.guard';
import { LoginComponent } from './user-management/login/login.component'; import { LoginComponent } from './user-management/login/login.component';
import { WelcomepageComponent } from '@app/welcomepage/welcomepage.component'; import { WelcomepageComponent } from './welcomepage/welcomepage.component';
import { B2AccessLoginComponent } from './user-management/login/b2access/b2access-login.component'; import { B2AccessLoginComponent } from './user-management/login/b2access/b2access-login.component';
const appRoutes: Routes = [ const appRoutes: Routes = [

View File

@ -30,11 +30,11 @@ import { PageNotFoundComponent } from './not-found.component';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { NgModule } from "@angular/core"; import { NgModule } from "@angular/core";
import { DatasetProfileModule } from './dataset-profile-form/dataset-profile.module'; import { DatasetProfileModule } from './dataset-profile-form/dataset-profile.module';
import { WelcomepageComponent } from '@app/welcomepage/welcomepage.component'; import { WelcomepageComponent } from './welcomepage/welcomepage.component';
import { HelpContentService } from './services/help-content/help-content.service'; import { HelpContentService } from './services/help-content/help-content.service';
import { HelpContentComponent } from './help-content/help-content.component'; import { HelpContentComponent } from './help-content/help-content.component';
import { B2AccessLoginComponent } from './user-management/login/b2access/b2access-login.component'; import { B2AccessLoginComponent } from './user-management/login/b2access/b2access-login.component';
import { RecentActivityComponent } from '@app/users/activity/recent-activity.component'; import { RecentActivityComponent } from './users/activity/recent-activity.component';
import { LanguageResolverService } from './services/language-resolver/language-resolver.service'; import { LanguageResolverService } from './services/language-resolver/language-resolver.service';
import { LanguageService } from './services/language/language.service'; import { LanguageService } from './services/language/language.service';

View File

@ -4,9 +4,9 @@ import { Component, OnInit, Inject } from "@angular/core";
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Params, ActivatedRoute, Router } from '@angular/router'; import { Params, ActivatedRoute, Router } from '@angular/router';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { DatasetService } from '@app/services/dataset/dataset.service'; import { DatasetService } from '../services/dataset/dataset.service';
import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel'; import { DatasetProfileModel } from '../models/datasetprofile/DatasetProfileModel';
import { DatasetProfileModule } from '@app/dataset-profile-form/dataset-profile.module'; import { DatasetProfileModule } from '../dataset-profile-form/dataset-profile.module';
@Component({ @Component({
selector: 'available-profiles-component', selector: 'available-profiles-component',

View File

@ -28,10 +28,11 @@
</mat-form-field> </mat-form-field>
</div> </div>
</div> </div>
<mat-form-field class="full-width">
<input matInput type="number" placeholder="Ordinal" formControlName="ordinal">
</mat-form-field>
<div *ngIf="isComposite" class="col-md-6"> <div *ngIf="isComposite" class="col-md-6">
<mat-form-field class="full-width">
<input matInput type="number" placeholder="Ordinal" formControlName="ordinal">
</mat-form-field>
<mat-form-field class="full-width"> <mat-form-field class="full-width">
<input matInput type="string" placeholder="Id" formControlName="id"> <input matInput type="string" placeholder="Id" formControlName="id">
</mat-form-field> </mat-form-field>

View File

@ -14,7 +14,7 @@ export class CompositeFieldFormComponent {
@Input() form: FormGroup; @Input() form: FormGroup;
@Input() dataModel: FieldSet; @Input() dataModel: FieldSet;
@Input() indexPath: string; @Input() indexPath: string;
isComposite: boolean = false; isComposite: boolean = false;
isMultiplicityEnabled: boolean = false; isMultiplicityEnabled: boolean = false;
@ -22,15 +22,15 @@ export class CompositeFieldFormComponent {
ngOnInit() { ngOnInit() {
//this.addNewField(); //this.addNewField();
if(this.form.get("multiplicity")) if (this.form.get("multiplicity"))
if (this.form.get("multiplicity").value.min >1 || this.form.get("multiplicity").value.max >1 ) if (this.form.get("multiplicity").value.min > 1 || this.form.get("multiplicity").value.max > 1)
this.isMultiplicityEnabled= true; this.isMultiplicityEnabled = true;
this.isComposite = this.dataModel.fields.length > 1; this.isComposite = this.dataModel.fields.length > 1;
} }
onIsCompositeChange(isComposite: boolean) { onIsCompositeChange(isComposite: boolean) {
if (!isComposite && (<FormArray>this.form.get("fields")).length > 1) { if (!isComposite && (<FormArray>this.form.get("fields")).length > 1) {
for(let i = 0; i < (<FormArray>this.form.get("fields")).length - 1; i++) { for (let i = 0; i < (<FormArray>this.form.get("fields")).length - 1; i++) {
(<FormArray>this.form.get("fields")).removeAt(1); (<FormArray>this.form.get("fields")).removeAt(1);
} }
this.dataModel.fields.splice(1); this.dataModel.fields.splice(1);

View File

@ -1,6 +1,6 @@
import { NgModule } from "@angular/core"; import { NgModule } from "@angular/core";
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { FormsModule,ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DatasetProfileRoutes } from "./dataset-profile.router"; import { DatasetProfileRoutes } from "./dataset-profile.router";
import { RouterModule } from "@angular/router"; import { RouterModule } from "@angular/router";
@ -23,7 +23,7 @@ import { RadioBoxComponent } from '../shared/componentsAdmin/radiobox/radiobox-c
import { WordlistComponent } from '../shared/componentsAdmin/wordlist/wordlist-component'; import { WordlistComponent } from '../shared/componentsAdmin/wordlist/wordlist-component';
import { AutocompleteComponent } from '../shared/componentsAdmin/autocomplete/autocomplete-component'; import { AutocompleteComponent } from '../shared/componentsAdmin/autocomplete/autocomplete-component';
import { ComboboxComponent } from '../shared/componentsAdmin/combobox/combobox-component'; import { ComboboxComponent } from '../shared/componentsAdmin/combobox/combobox-component';
import { SharedModule } from "@app/shared/shared.module"; import { SharedModule } from "../shared/shared.module";
@NgModule({ @NgModule({
imports: [ imports: [
@ -71,7 +71,7 @@ import { SharedModule } from "@app/shared/shared.module";
WordlistComponent, WordlistComponent,
RadioBoxComponent RadioBoxComponent
], ],
providers:[ providers: [
] ]
}) })

View File

@ -1,9 +1,9 @@
 
import { Component, Input } from '@angular/core'; import { Component, Input } from '@angular/core';
import { FormGroup, FormControl, FormArray } from '@angular/forms'; import { FormGroup, FormControl, FormArray } from '@angular/forms';
import { ValidationTypes } from '@app/models/common/ValidationTypes'; import { ValidationTypes } from '../../models/common/ValidationTypes';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../models/datasetProfileAdmin/Field';
import { Rule } from '@app/models/datasetProfileAdmin/Rule'; import { Rule } from '../../models/datasetProfileAdmin/Rule';
@Component({ @Component({
selector: 'field-form', selector: 'field-form',
@ -20,7 +20,7 @@ export class FieldFormComponent {
isFieldMultiplicityEnabled: boolean = false; isFieldMultiplicityEnabled: boolean = false;
constructon() { constructon() {
} }
ngOnInit() { ngOnInit() {
if (this.form.get("multiplicity")) if (this.form.get("multiplicity"))

View File

@ -8,13 +8,13 @@ import { SectionFormComponent } from '../section-form/section-form.component';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router'; import { Router, ActivatedRoute, ParamMap, Params } from '@angular/router';
import { PageFormComponent } from '../page-form/page-component' import { PageFormComponent } from '../page-form/page-component'
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service'; import { DatasetProfileAdmin } from '../../services/datasetProfileAdmin/datasetProfileAfmin.service';
import { Section } from '@app/models/datasetProfileAdmin/Section'; import { Section } from '../../models/datasetProfileAdmin/Section';
@Component({ @Component({
selector: 'form-comp', selector: 'form-comp',
templateUrl: './form.component.html', templateUrl: './form.component.html',
providers:[DatasetProfileAdmin, DatasetProfileService], providers: [DatasetProfileAdmin, DatasetProfileService],
styleUrls: ['./form.component.scss'] styleUrls: ['./form.component.scss']
}) })
@ -25,7 +25,7 @@ export class FormComponent {
private profileID: string; private profileID: string;
constructor(public datasetprofileAdmin: DatasetProfileAdmin, private datasetProfileService: DatasetProfileService, private route: ActivatedRoute, constructor(public datasetprofileAdmin: DatasetProfileAdmin, private datasetProfileService: DatasetProfileService, private route: ActivatedRoute,
private router:Router) { private router: Router) {
this.profileID = route.snapshot.params['id']; this.profileID = route.snapshot.params['id'];
} }
@ -83,10 +83,10 @@ export class FormComponent {
onSubmit() { onSubmit() {
let data = this.form.value; let data = this.form.value;
if (this.profileID) this.updateForm(this.profileID, data).subscribe(()=>{ if (this.profileID) this.updateForm(this.profileID, data).subscribe(() => {
this.router.navigate(['/datasetsProfiles']) this.router.navigate(['/datasetsProfiles'])
}); });
else this.createForm(data).subscribe(()=>{ else this.createForm(data).subscribe(() => {
this.router.navigate(['/datasetsProfiles']) this.router.navigate(['/datasetsProfiles'])
}); });
} }

View File

@ -1,6 +1,6 @@
import { Component, Input, Output, EventEmitter } from '@angular/core'; import { Component, Input, Output, EventEmitter } from '@angular/core';
import { FormGroup } from '@angular/forms' import { FormGroup } from '@angular/forms'
import { Page } from '@app/models/datasetProfileAdmin/Page'; import { Page } from '../../models/datasetProfileAdmin/Page';
@Component({ @Component({

View File

@ -9,10 +9,10 @@ import { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable"; import { Observable } from "rxjs/Observable";
import { PageEvent } from '@angular/material'; import { PageEvent } from '@angular/material';
import { DataManagementPlanService } from "@app/services/data-management-plan/data-management-plan.service"; import { DataManagementPlanService } from "../services/data-management-plan/data-management-plan.service";
import { DataManagementPlanModel } from "@app/models/data-managemnt-plans/DataManagementPlanModel"; import { DataManagementPlanModel } from "../models/data-managemnt-plans/DataManagementPlanModel";
import { DatasetCriteriaComponent } from '@app/shared/components/criteria/datasets/datasets-criteria.component'; import { DatasetCriteriaComponent } from '../shared/components/criteria/datasets/datasets-criteria.component';
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service'; import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service';
@Component({ @Component({

View File

@ -67,18 +67,22 @@
<!-- Column Definition: Submission Time --> <!-- Column Definition: Submission Time -->
<ng-container cdkColumnDef="actions"> <ng-container cdkColumnDef="actions">
<mat-header-cell *matHeaderCellDef>{{'DATASET-LISTING.COLUMNS.ACTIONS' | translate}}</mat-header-cell> <mat-header-cell *matHeaderCellDef>{{'DATASET-LISTING.COLUMNS.ACTIONS' | translate}}</mat-header-cell>
<mat-cell *matCellDef="let row" (click)="$event.stopPropagation()"> <mat-cell *matCellDef="let row" (click)="$event.stopPropagation()">
<mat-menu #actionsMenu="matMenu"> <mat-menu #actionsMenu="matMenu">
<button *ngIf="row.status == 0" mat-menu-item ><mat-icon>mode_edit</mat-icon>{{'DATASET-LISTING.ACTIONS.EDIT' | translate}}</button> <button *ngIf="row.status == 0" mat-menu-item>
</mat-menu> <mat-icon>mode_edit</mat-icon>{{'DATASET-LISTING.ACTIONS.EDIT' | translate}}</button>
<button mat-icon-button [matMenuTriggerFor]="actionsMenu"> <button *ngIf="row.status != 0" mat-menu-item>
<mat-icon>more_vert</mat-icon> <mat-icon>public</mat-icon>{{'DATASET-LISTING.ACTIONS.MAKE-IT-PUBLIC' | translate}}</button>
</button>
</mat-menu>
<button mat-icon-button [matMenuTriggerFor]="actionsMenu">
<mat-icon>more_vert</mat-icon>
</button>
</mat-cell> </mat-cell>
</ng-container> </ng-container>
<mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row> <mat-header-row *matHeaderRowDef="displayedColumns"></mat-header-row>
<mat-row *matRowDef="let row; columns: displayedColumns" (click)="rowClick(row.id)"></mat-row> <mat-row *matRowDef="let row; columns: displayedColumns" (click)="rowClick(row.id)"></mat-row>
<!-- (click)="rowClick(row.id)" --> <!-- (click)="rowClick(row.id)" -->
</mat-table> </mat-table>

View File

@ -11,9 +11,9 @@ import { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable"; import { Observable } from "rxjs/Observable";
import { PageEvent } from '@angular/material'; import { PageEvent } from '@angular/material';
import { DataManagementPlanService } from "@app/services/data-management-plan/data-management-plan.service"; import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service";
import { DataManagementPlanModel } from "@app/models/data-managemnt-plans/DataManagementPlanModel"; import { DataManagementPlanModel } from "../../models/data-managemnt-plans/DataManagementPlanModel";
import { DatasetCriteriaComponent } from '@app/shared/components/criteria/datasets/datasets-criteria.component'; import { DatasetCriteriaComponent } from '../../shared/components/criteria/datasets/datasets-criteria.component';
@Component({ @Component({
@ -59,8 +59,8 @@ export class DatasetListingComponent implements OnInit {
this.refresh(); this.refresh();
this.criteria.setRefreshCallback(() => this.refresh()); this.criteria.setRefreshCallback(() => this.refresh());
if (this.dmpId != null) if (this.dmpId != null)
if(params['dmpLabel']!=undefined) if (params['dmpLabel'] != undefined)
this.titlePrefix ="for " + params['dmpLabel']; this.titlePrefix = "for " + params['dmpLabel'];
}); });
} }
@ -80,7 +80,7 @@ export class DatasetListingComponent implements OnInit {
return defaultCriteria; return defaultCriteria;
} }
makeItPublic(id: String) { makeItPublic(id: String) {
this.datasetService.makeDatasetPublic(id).subscribe(); this.datasetService.makeDatasetPublic(id).subscribe();
} }

View File

@ -12,7 +12,7 @@ import { FormGroup, AbstractControl, FormControl, FormArray } from "@angular/for
import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component"; import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component";
import { BaseErrorModel } from "../../models/error/BaseErrorModel"; import { BaseErrorModel } from "../../models/error/BaseErrorModel";
import { TdDialogService } from "@covalent/core"; import { TdDialogService } from "@covalent/core";
import { HostConfiguration } from "@app/app.constants"; import { HostConfiguration } from "../../app.constants";
import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service"; import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service";
import { DataManagementPlanProfileModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileModel"; import { DataManagementPlanProfileModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileModel";
import { DMPProfileFieldDataType, DMPProfileType, DataManagementProfileField } from "../../models/data-management-plan-profile/DataManagementProfileField"; import { DMPProfileFieldDataType, DMPProfileType, DataManagementProfileField } from "../../models/data-management-plan-profile/DataManagementProfileField";

View File

@ -17,7 +17,7 @@ import { CovalentDialogsModule } from '@covalent/core';
import { SharedModule } from '../shared/shared.module' import { SharedModule } from '../shared/shared.module'
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { AvailableProfilesComponent } from '@app/available-profiles/available-profiles.component'; import { AvailableProfilesComponent } from '../available-profiles/available-profiles.component';
import { DynamicDmpFieldResolver } from './editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component'; import { DynamicDmpFieldResolver } from './editor/dynamic-field-resolver/dynamic-dmp-field-resolver.component';
import { DynamicFieldsProjectComponent } from './editor/dynamic-fields-project/dynamic-fields-project.component'; import { DynamicFieldsProjectComponent } from './editor/dynamic-fields-project/dynamic-fields-project.component';
import { DynamicFieldProjectComponent } from './editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component'; import { DynamicFieldProjectComponent } from './editor/dynamic-fields-project/dynamic-field-project/dynamic-field-project.component';

View File

@ -19,13 +19,13 @@ import { DatasetProfileModel } from "../../models/datasets/DatasetProfileModel";
import { AutoCompleteConfiguration } from "../../shared/components/autocomplete/AutoCompleteConfiguration"; import { AutoCompleteConfiguration } from "../../shared/components/autocomplete/AutoCompleteConfiguration";
import { ProjectCriteria } from "../../models/criteria/project/ProjectCriteria"; import { ProjectCriteria } from "../../models/criteria/project/ProjectCriteria";
import { ProjectService } from "../../services/project/project.service"; import { ProjectService } from "../../services/project/project.service";
import { DmpUsersModel } from "@app/models/dmpUsers/DmpUsersModel"; import { DmpUsersModel } from "../../models/dmpUsers/DmpUsersModel";
import { AddResearchersComponent } from "@app/add-researchers/add-researchers.component"; import { AddResearchersComponent } from "../../add-researchers/add-researchers.component";
import { ViewContainerRef } from '@angular/core'; import { ViewContainerRef } from '@angular/core';
import { TdDialogService } from '@covalent/core'; import { TdDialogService } from '@covalent/core';
import { AvailableProfilesComponent } from "@app/available-profiles/available-profiles.component"; import { AvailableProfilesComponent } from "../../available-profiles/available-profiles.component";
import { AutoCompleteChipConfiguration } from "@app/shared/components/autocompleteChips/AutoCompleteChipConfiguration"; import { AutoCompleteChipConfiguration } from "../../shared/components/autocompleteChips/AutoCompleteChipConfiguration";
import { BaseCriteria } from "@app/models/criteria/BaseCriteria"; import { BaseCriteria } from "../../models/criteria/BaseCriteria";
import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service"; import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service";
import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel"; import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel";
import { DataManagementPlanProfileCriteria } from "../../models/criteria/dmp-profile/DataManagementPlanProfileCriteria"; import { DataManagementPlanProfileCriteria } from "../../models/criteria/dmp-profile/DataManagementPlanProfileCriteria";

View File

@ -12,9 +12,9 @@ import { Router, ActivatedRoute } from "@angular/router";
import { TranslateService } from "@ngx-translate/core"; import { TranslateService } from "@ngx-translate/core";
import { DataSource } from "@angular/cdk/table"; import { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable"; import { Observable } from "rxjs/Observable";
import { DataManagementPlanRoutes } from '@app/dmps/dmps.routes'; import { DataManagementPlanRoutes } from '../../dmps/dmps.routes';
import { DatasetRoutes } from '@app/datasets/dataset.routes'; import { DatasetRoutes } from '../../datasets/dataset.routes';
import { ProjectModel } from '@app/models/projects/ProjectModel'; import { ProjectModel } from '../../models/projects/ProjectModel';

View File

@ -19,8 +19,8 @@ import { TranslateService } from "@ngx-translate/core";
import { DataSource } from "@angular/cdk/table"; import { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable"; import { Observable } from "rxjs/Observable";
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { AutoCompleteChipConfiguration } from "@app/shared/components/autocompleteChips/AutoCompleteChipConfiguration"; import { AutoCompleteChipConfiguration } from "../../../shared/components/autocompleteChips/AutoCompleteChipConfiguration";
import { BaseCriteria } from '@app/models/criteria/BaseCriteria'; import { BaseCriteria } from '../../../models/criteria/BaseCriteria';
@Component({ @Component({

View File

@ -1,15 +1,3 @@
<div [formGroup]="form"> <app-auto-complete class="mat-form-field-full-width" placeholder="{{ form.get('data').value.label | translate }}" [inputData]="autoCompleteConfiguration"
<mat-form-field> titleKey="label" [formCtrl]="form.get('value')" [displayFunction]="displayWith.bind(this)" [assignValueFunction]="assign.bind(this)" >
<input matInput [matAutocomplete]="auto" formControlName="value" [required]="required" [disabled]="disabled"> </app-auto-complete>
<mat-progress-spinner matSuffix mode="indeterminate" *ngIf="loading" [diameter]="22"></mat-progress-spinner>
<mat-autocomplete #auto="matAutocomplete" (optionSelected)="this.optionSelected($event)">
<mat-option *ngFor="let item of filteredItems " [value]="item">
<span *ngIf="titleKey">{{item[titleKey]}}</span>
<span *ngIf="subtitleKey">{{item[subtitleKey]}}</span>
</mat-option>
<!-- <mat-option *ngIf="filteredItems.length == 0" value="das">
<span>{{'GENERAL.AUTOCOMPLETE.NO-ITEMS' | translate}}</span>
</mat-option> -->
</mat-autocomplete>
</mat-form-field>
</div>

View File

@ -1,9 +1,12 @@
import { Field } from '../../../models/Field'; import { Field } from '../../../models/Field';
import { Component, OnInit, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core'; import { Component, OnInit, Input, Output, EventEmitter, forwardRef, ViewEncapsulation } from '@angular/core';
import { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms'; import { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
import { DatasetProfileService } from '@app/services/dataset-profile.service'; import { DatasetProfileService } from '../../../services/dataset-profile.service';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { AutoCompleteConfiguration } from '../../../shared/components/autocomplete/AutoCompleteConfiguration';
import { RequestItem } from '../../../models/criteria/RequestItem';
import { AutocompleteLookupItem } from '../../../models/auto-complete/AutocompleteLookUpItem'
import { BaseCriteria } from '../../../models/criteria/BaseCriteria';
declare var $: any; declare var $: any;
@ -13,9 +16,6 @@ declare var $: any;
styleUrls: ['./autocomplete-remote.component.css'], styleUrls: ['./autocomplete-remote.component.css'],
encapsulation: ViewEncapsulation.None, encapsulation: ViewEncapsulation.None,
}) })
export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAccessor */ { export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAccessor */ {
@ -23,6 +23,7 @@ export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAcces
@Input() disabled = false @Input() disabled = false
@Input() form: FormGroup; @Input() form: FormGroup;
private autoCompleteConfiguration: AutoCompleteConfiguration;
private loading: boolean; private loading: boolean;
private datasetId; private datasetId;
values: any[] = new Array(); values: any[] = new Array();
@ -34,62 +35,28 @@ export class AutocompleteRemoteComponent implements OnInit/* , ControlValueAcces
ngOnInit() { ngOnInit() {
let valueChanges = this.form.controls['value'].valueChanges.share(); let autocompleteRequestItem: RequestItem<AutocompleteLookupItem> = new RequestItem();
valueChanges.subscribe(searchTerm => { autocompleteRequestItem.criteria = new AutocompleteLookupItem();
this.loading = true; autocompleteRequestItem.criteria.fieldID = this.field.id;
if (this.form.controls['value'].value) autocompleteRequestItem.criteria.profileID = this.datasetId;
this.resetFormGroupValue(); this.autoCompleteConfiguration = new AutoCompleteConfiguration(this.datasetProfileService.queryAutocomplete.bind(this.datasetProfileService), autocompleteRequestItem);
});
valueChanges
.debounceTime(this.typeaheadMS)
.subscribe(searchTerm => {
if (typeof searchTerm === 'string') {
this.updateByQuery(searchTerm)
}
});
} }
displayWith(item: any) {
resetFormGroupValue() { if (!item) return null;
this.form.patchValue({ value: null }, { emitEvent: false }); if (typeof item === 'string') item = this.transform(item);
return item["label"];
} }
assign(item: any) {
updateByQuery(query: string) { if (!item) return null;
this.datasetProfileService.queryAutocomplete({ profileID: this.datasetId, fieldID: this.field.id, searchTerm: query }) return this.transform(item);
.subscribe(
response => {
this.values.length = 0;
response.payload.forEach(element => {
this.values.push(element.attributes.name);
});
},
error => {
}
);
} }
transform(item: any) {
onChange: any = () => { }; if (typeof item === 'string') return JSON.parse(item)
onTouched: any = () => { }; else return JSON.stringify(item);
registerOnChange(fn) {
this.onChange = fn;
} }
registerOnTouched(fn) {
this.onTouched = fn;
}
/* writeValue(value) {
if (value) {
this.value = value;
}
} */
} }

View File

@ -1,6 +1,6 @@
import { Field } from '../../../models/Field'; import { Field } from '../../../models/Field';
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, ViewEncapsulation } from '@angular/core'; import { Component, Input, ViewEncapsulation, OnInit } from '@angular/core';
import { FieldBase } from '../field-base'; import { FieldBase } from '../field-base';
@Component({ @Component({
@ -15,5 +15,4 @@ export class DynamicFieldCheckBoxComponent {
@Input() field: Field; @Input() field: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
} }

View File

@ -1,10 +1,6 @@
<div *ngIf="visibilityRulesService.isElementVisible(pathName,group.id)" class="group-component" [id]="group.id" [formGroup]="form"> <div *ngIf="visibilityRulesService.isElementVisible(pathName,group.id)" class="group-component" [id]="group.id" [formGroup]="form">
<!-- <h4>{{path + ' ' + group.title}}</h4> -->
<div class="content-left-margin"> <div class="content-left-margin">
<!-- <h5 *ngIf="group.description">{{group.description}}</h5>
<h5 *ngIf="group.extendedDescription" class="group-extended-desc">
<i>{{group.extendedDescription}}</i>
</h5> -->
<div *ngFor="let compositeField of group.compositeFields; let i = index;"> <div *ngFor="let compositeField of group.compositeFields; let i = index;">
<div *ngIf="visibilityRulesService.isElementVisible(null,compositeField.id)"> <div *ngIf="visibilityRulesService.isElementVisible(null,compositeField.id)">
<div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)"> <div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)">

View File

@ -1,38 +1,3 @@
<!-- Το αφηνω σχόλιο για τεστινγ για να βλεπω αν μου ξεφευγει κάτι -->
<!-- <div *ngIf="visibilityRulesService.isElementVisible(pathName,section.id)" class="panel-group" style="margin-top:10px;">
<div class="panel panel-default">
<div class="panel-heading clearfix">
<a data-toggle="collapse" href="#{{section.id}}" class="panel-title pull-left" style="padding-top: 7.5px;">{{path}} {{section.title}}</a>
<div class="btn-group pull-right">
<a data-toggle="collapse" href="#{{section.id}}" class="panel-title pull-left" style="margin-left:5px;padding-top: 7.5px;">
<span class="glyphicon glyphicon-minus"></span>
</a>
</div>
</div>
<div id="{{section.id}}" class="panel-collapse collapse in">
<div class="panel-body">
<div [id]="section.id" [formGroup]="form">
<h3 *ngIf="section.description">{{section.description}}</h3>
<h4 *ngIf="section.extendedDescription">{{section.extendedDescription}}</h4>
<div *ngIf="section.fieldGroups">
<div *ngFor="let group of section.fieldGroups; let j = index;">
<df-group [group]="group" [form]="form.get('fieldGroups').get(''+j)" [pathName]="pathName+'.fieldGroups.'+j"></df-group>
</div>
</div>
<div *ngIf="section.sections">
<div *ngFor="let itemsection of section.sections; let j = index;">
<df-section [section]="itemsection" [form]="form.get('sections').get(''+j)" [path]="path+'.'+(j+1)" [pathName]="pathName+'.sections.'+j"></df-section>
</div>
</div>
</div>
</div>
</div>
</div>
</div> -->
<!-- <a *ngIf="!form.get('fieldGroups').get(''+i).get('title').value" data-toggle="collapse" href="#{{indexPath + 'g' + i}}" class="panel-title pull-left"
style="padding-top: 7.5px;">{{i + 1}}. Group {{i + 1}}</a> -->
<div *ngIf="visibilityRulesService.isElementVisible(pathName,section.id)" class="panel-group" style="margin-top:10px;"> <div *ngIf="visibilityRulesService.isElementVisible(pathName,section.id)" class="panel-group" style="margin-top:10px;">
<mat-accordion> <mat-accordion>
<mat-expansion-panel expanded=true> <mat-expansion-panel expanded=true>
@ -46,12 +11,6 @@
</mat-panel-description> </mat-panel-description>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<!-- <div *ngIf="section.fieldGroups">
<div *ngFor="let group of section.fieldGroups; let j = index;">
<df-group [group]="group" [form]="form.get('fieldGroups').get(''+j)" [pathName]="pathName+'.fieldGroups.'+j"></df-group>
</div>
</div> -->
<div *ngFor="let compositeField of section.compositeFields; let i = index;"> <div *ngFor="let compositeField of section.compositeFields; let i = index;">
<div *ngIf="isVisible(pathName+'.compositeFields.'+i, compositeField)"> <div *ngIf="isVisible(pathName+'.compositeFields.'+i, compositeField)">
<div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)"> <div *ngIf="(compositeField?.multiplicity?.max - 1) > (compositeField?.multiplicityItems?.length)">
@ -64,13 +23,13 @@
<df-composite-field [compositeField]="multipleCompositeField" [form]="form.get('compositeFields').get(''+i).get('multiplicityItems').get(''+j)" <df-composite-field [compositeField]="multipleCompositeField" [form]="form.get('compositeFields').get(''+i).get('multiplicityItems').get(''+j)"
[pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field> [pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field>
</div> </div>
<div *ngIf="compositeField.hasCommentField" [formGroup]="form.get('compositeFields').get(''+i)">
<mat-form-field>
<input matInput formControlName="commentFieldValue" placeholder="comment">
</mat-form-field>
</div>
</div> </div>
<div *ngIf="compositeField.hasCommentField" [formGroup]="form.get('compositeFields').get(''+i)">
<mat-form-field>
<input matInput formControlName="commentFieldValue" placeholder="comment">
</mat-form-field>
</div>
</div> </div>
<div *ngIf="section.sections"> <div *ngIf="section.sections">

View File

@ -2,7 +2,7 @@ import { VisibilityRulesService } from '../../visibility-rules/visibility-rules.
import { FormGroup, Form, FormArray } from '@angular/forms'; import { FormGroup, Form, FormArray } from '@angular/forms';
import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core'; import { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
import { CompositeField } from '../../models/CompositeField'; import { CompositeField } from '../../models/CompositeField';
import { Section } from '@app/models/Section'; import { Section } from '../../models/Section';
@Component({ @Component({
@ -33,9 +33,9 @@ export class DynamicFormSectionComponent implements OnInit {
isVisible(pathname: string, fieldSet: CompositeField): boolean { isVisible(pathname: string, fieldSet: CompositeField): boolean {
if (!this.visibilityRulesService.isElementVisible(pathname, fieldSet.id)) return false; if (!this.visibilityRulesService.isElementVisible(pathname, fieldSet.id)) return false;
for (var i = 0; i < fieldSet.fields.length; i++) { for (var i = 0; i < fieldSet.fields.length; i++) {
if (!this.visibilityRulesService.isElementVisible(pathname+'.fields.'+i, fieldSet.fields[i].id)) if (this.visibilityRulesService.isElementVisible(pathname + '.fields.' + i, fieldSet.fields[i].id))
return false; return true;
} }
return true; return false;
} }
} }

View File

@ -29,8 +29,8 @@ import { HttpClient, HttpClientModule } from '@angular/common/http';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { NgModule } from "@angular/core"; import { NgModule } from "@angular/core";
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service'; import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service';
import { DatasetProfileService } from '@app/services/dataset-profile.service'; import { DatasetProfileService } from '../services/dataset-profile.service';
@NgModule({ @NgModule({

View File

@ -39,7 +39,6 @@
<df-section *ngIf='this.shouldDisplaySection(section)' [section]="section" [form]="form.get('sections').get(''+i)" [path]="i+1" <df-section *ngIf='this.shouldDisplaySection(section)' [section]="section" [form]="form.get('sections').get(''+i)" [path]="i+1"
[pathName]="'sections.'+i"></df-section> [pathName]="'sections.'+i"></df-section>
</div> --> </div> -->
</div> </div>
</form> </form>
<!-- </mat-sidenav-content> <!-- </mat-sidenav-content>

View File

@ -3,7 +3,7 @@ import { Router, ActivatedRoute } from '@angular/router';
import { DashboardService } from '../../app/services/dashboard/dashboard.service'; import { DashboardService } from '../../app/services/dashboard/dashboard.service';
import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel'; import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel';
import { JsonSerializer } from '../utilities/JsonSerializer'; import { JsonSerializer } from '../utilities/JsonSerializer';
import { AuthService } from '@app/services/auth/auth.service'; import { AuthService } from '../services/auth/auth.service';
@Component({ @Component({
selector: 'homepage', selector: 'homepage',

View File

@ -1,23 +1,32 @@
import { DataField } from './DataField'; import { DataField } from './DataField';
import { FormGroup } from '@angular/forms' import { FormGroup } from '@angular/forms'
import { ListingItem } from '../Common/ListingItem';
import { JsonSerializer } from '../../utilities/JsonSerializer';
export class AutocompleteData extends DataField<AutocompleteData>{ export class AutocompleteData extends DataField<AutocompleteData>{
public type:string; public type: string;
public url:string; public url: string;
public optionsRoot: string;
public autoCompleteOptions: ListingItem = new ListingItem();
buildForm():FormGroup{ buildForm(): FormGroup {
return this.formBuilder.group({ let formGroup = this.formBuilder.group({
label:[this.label], label: [this.label],
type:[this.type], type: [this.type],
url:[this.url] url: [this.url],
optionsRoot: [this.optionsRoot]
}) })
formGroup.addControl("autoCompleteOptions", this.autoCompleteOptions.buildForm());
return formGroup;
} }
fromJSONObject(item:any):AutocompleteData{ fromJSONObject(item: any): AutocompleteData {
this.type = item.type; this.type = item.type;
this.url = item.url; this.url = item.url;
this.label = item.label; this.label = item.label;
this.optionsRoot = item.optionsRoot;
this.autoCompleteOptions = JsonSerializer.fromJSONObject(item.autoCompleteOptions, ListingItem);
return this; return this;
} }
} }

View File

@ -1,15 +1,15 @@
import { JsonSerializer } from '../../utilities/JsonSerializer'; import { JsonSerializer } from '../../utilities/JsonSerializer';
import { ListingItem } from '../Common/ListingItem'; import { ListingItem } from '../Common/ListingItem';
import { DataField } from './DataField'; import { DataField } from './DataField';
import { FormGroup } from '@angular/forms' import { FormGroup } from '@angular/forms'
export class WordListData extends DataField<WordListData>{ export class WordListData extends DataField<WordListData>{
public type:string; public type: string;
public options:Array<ListingItem>; public options: Array<ListingItem>;
buildForm():FormGroup{ buildForm(): FormGroup {
let formGroup = this.formBuilder.group({ let formGroup = this.formBuilder.group({
type:[this.type], type: [this.type],
label:[this.label] label: [this.label]
}); });
let optionsFormArray = new Array<FormGroup>(); let optionsFormArray = new Array<FormGroup>();
if (this.options) { if (this.options) {
@ -23,9 +23,9 @@ export class WordListData extends DataField<WordListData>{
return formGroup; return formGroup;
} }
fromJSONObject(item:any):WordListData{ fromJSONObject(item: any): WordListData {
this.type = item.type; this.type = item.type;
this.options = JsonSerializer.fromJSONArray(item.options,ListingItem); this.options = JsonSerializer.fromJSONArray(item.options, ListingItem);
this.label = item.label; this.label = item.label;
return this; return this;
} }

View File

@ -5,7 +5,7 @@ import { FormGenerator } from './interfaces/FormGenerator';
import { JsonSerializer } from '../utilities/JsonSerializer'; import { JsonSerializer } from '../utilities/JsonSerializer';
import { Section } from './Section'; import { Section } from './Section';
import { Serializable } from './interfaces/Serializable'; import { Serializable } from './interfaces/Serializable';
import { Page } from '@app/models/Page'; import { Page } from '../models/Page';
export class DatasetProfileDefinitionModel extends BaseModel implements Serializable<DatasetProfileDefinitionModel>, FormGenerator<FormGroup>{ export class DatasetProfileDefinitionModel extends BaseModel implements Serializable<DatasetProfileDefinitionModel>, FormGenerator<FormGroup>{
public status: number public status: number
public pages: Array<Page>; public pages: Array<Page>;

View File

@ -5,7 +5,7 @@ import { JsonSerializer } from '../utilities/JsonSerializer';
import { Serializable } from './interfaces/Serializable'; import { Serializable } from './interfaces/Serializable';
import { Multiplicity } from './Multiplicity'; import { Multiplicity } from './Multiplicity';
import { DefaultValue } from './DefaultValue'; import { DefaultValue } from './DefaultValue';
import { ValidationTypes } from '@app/models/common/ValidationTypes'; import { ValidationTypes } from '../models/common/ValidationTypes';
import { ViewStyle } from './datasetProfileAdmin/ViewStyle'; import { ViewStyle } from './datasetProfileAdmin/ViewStyle';
export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{ export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{

View File

@ -1,4 +1,4 @@
import { Section } from "@app/models/Section"; import { Section } from "../models/Section";
import { BaseModel } from './BaseModel'; import { BaseModel } from './BaseModel';
import { FormGenerator } from './interfaces/FormGenerator'; import { FormGenerator } from './interfaces/FormGenerator';
import { Serializable } from './interfaces/Serializable'; import { Serializable } from './interfaces/Serializable';
@ -10,20 +10,20 @@ export class Page extends BaseModel implements Serializable<Page> {
public title: string; public title: string;
public sections: Array<Section>; public sections: Array<Section>;
fromJSONObject(item:any):Page{ fromJSONObject(item: any): Page {
this.ordinal = item.ordinal; this.ordinal = item.ordinal;
this.title = item.title; this.title = item.title;
this.sections = JsonSerializer.fromJSONArray(item.sections,Section); this.sections = JsonSerializer.fromJSONArray(item.sections, Section);
return this; return this;
} }
buildForm():FormGroup{ buildForm(): FormGroup {
let formGroup:FormGroup = new FormBuilder().group({}); let formGroup: FormGroup = new FormBuilder().group({});
let sectionsFormArray = new Array<FormGroup>(); let sectionsFormArray = new Array<FormGroup>();
this.sections.forEach(item => { this.sections.forEach(item => {
let form: FormGroup = item.buildForm(); let form: FormGroup = item.buildForm();
sectionsFormArray.push(form) sectionsFormArray.push(form)
}) })
formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray)); formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray));
return formGroup; return formGroup;
} }

View File

@ -0,0 +1,6 @@
import { BaseCriteria } from "../criteria/BaseCriteria";
export class AutocompleteLookupItem extends BaseCriteria {
public profileID: String;
public fieldID: String;
}

View File

@ -1,5 +0,0 @@
export class AutocompleteLookupItem {
public profileID: String;
public fieldID: String;
public searchTerm: String;
}

View File

@ -1,4 +1,4 @@
import { BaseCriteria } from "@app/models/criteria/BaseCriteria"; import { BaseCriteria } from "../../../models/criteria/BaseCriteria";
export class ResearcherCriteria extends BaseCriteria { export class ResearcherCriteria extends BaseCriteria {
public name: String public name: String

View File

@ -10,7 +10,7 @@ import { ResearcherModel } from "../researcher/ResearcherModel";
import { JsonSerializer } from "../../utilities/JsonSerializer"; import { JsonSerializer } from "../../utilities/JsonSerializer";
import { ProfileModel } from "../profile/ProfileModel"; import { ProfileModel } from "../profile/ProfileModel";
import { Status } from "../Status"; import { Status } from "../Status";
import { DmpUsersModel } from "@app/models/dmpUsers/DmpUsersModel"; import { DmpUsersModel } from "../../models/dmpUsers/DmpUsersModel";
import { DataManagementPlanProfile } from "../data-management-plan-profile/DataManagementPlanProfile"; import { DataManagementPlanProfile } from "../data-management-plan-profile/DataManagementPlanProfile";
import { DynamicField } from "./DynamicField"; import { DynamicField } from "./DynamicField";
@ -85,7 +85,7 @@ export class DataManagementPlanModel implements Serializable<DataManagementPlanM
baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] }); baseContext.validation.push({ key: 'status', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'status')] });
baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] }); baseContext.validation.push({ key: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] });
baseContext.validation.push({ key: 'project', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'project')] }); baseContext.validation.push({ key: 'project', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'project')] });
baseContext.validation.push({ key: 'organisations', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'organisations')] }); baseContext.validation.push({ key: 'organisations', validators: [BackendErrorValidator(this.errorModel, 'organisations')] });
baseContext.validation.push({ key: 'researchers', validators: [BackendErrorValidator(this.errorModel, 'researchers')] }); baseContext.validation.push({ key: 'researchers', validators: [BackendErrorValidator(this.errorModel, 'researchers')] });
baseContext.validation.push({ key: 'profiles', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profiles')] }); baseContext.validation.push({ key: 'profiles', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profiles')] });
baseContext.validation.push({ key: 'associatedUsers', validators: [BackendErrorValidator(this.errorModel, 'associatedUsers')] }); baseContext.validation.push({ key: 'associatedUsers', validators: [BackendErrorValidator(this.errorModel, 'associatedUsers')] });

View File

@ -9,14 +9,14 @@ import { DataField } from '../DataField/DataField';
import { BaseModel } from '../BaseModel'; import { BaseModel } from '../BaseModel';
import { FormGroup, FormArray, FormControl } from '@angular/forms'; import { FormGroup, FormArray, FormControl } from '@angular/forms';
import { FormGenerator } from '../interfaces/FormGenerator'; import { FormGenerator } from '../interfaces/FormGenerator';
import { JsonSerializer } from 'app/utilities/JsonSerializer'; import { JsonSerializer } from '../../utilities/JsonSerializer';
import { Serializable } from '../interfaces/Serializable'; import { Serializable } from '../interfaces/Serializable';
import { Rule } from './Rule'; import { Rule } from './Rule';
import { Multiplicity } from './Multiplicity'; import { Multiplicity } from './Multiplicity';
import { DefaultValue } from './DefaultValue'; import { DefaultValue } from './DefaultValue';
import { ViewStyle } from './ViewStyle'; import { ViewStyle } from './ViewStyle';
import { Visibility } from './Visibility'; import { Visibility } from './Visibility';
import { ValidationTypes } from '@app/models/common/ValidationTypes'; import { ValidationTypes } from '../../models/common/ValidationTypes';
export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{ export class Field extends BaseModel implements Serializable<Field>, FormGenerator<FormGroup>{
@ -64,10 +64,10 @@ export class Field extends BaseModel implements Serializable<Field>, FormGenerat
ordinal: [this.ordinal] ordinal: [this.ordinal]
}); });
let valid = ValidationTypes.None let valid = ValidationTypes.None
if (this.validations && this.validations[0]==1) valid = ValidationTypes.Required if (this.validations && this.validations[0] == 1) valid = ValidationTypes.Required
const arr = new FormArray([ const arr = new FormArray([
new FormControl(valid) new FormControl(valid)
]); ]);
//formGroup.addControl("multiplicity", this.multiplicity.buildForm()); //formGroup.addControl("multiplicity", this.multiplicity.buildForm());
formGroup.addControl("validations", arr); formGroup.addControl("validations", arr);

View File

@ -11,7 +11,7 @@ import { ServiceModel } from "../services/ServiceModel";
import { JsonSerializer } from "../../utilities/JsonSerializer"; import { JsonSerializer } from "../../utilities/JsonSerializer";
import { RegisterModel } from "../registers/RegisterModel"; import { RegisterModel } from "../registers/RegisterModel";
import { DataRepositoryModel } from "../dataRepositories/DataRepositoryModel"; import { DataRepositoryModel } from "../dataRepositories/DataRepositoryModel";
import { ExternalDatasetModel } from '@app/models/external-dataset/ExternalDatasetModel'; import { ExternalDatasetModel } from '../../models/external-dataset/ExternalDatasetModel';
export class DatasetWizardModel implements Serializable<DatasetWizardModel> { export class DatasetWizardModel implements Serializable<DatasetWizardModel> {
public id: String; public id: String;

View File

@ -1,4 +1,4 @@
import { Serializable } from "@app/models/Serializable"; import { Serializable } from "../../models/Serializable";
export class ContentFile implements Serializable<ContentFile>{ export class ContentFile implements Serializable<ContentFile>{

View File

@ -1,8 +1,8 @@
import { Serializable } from "../Serializable"; import { Serializable } from "../Serializable";
import { ContentFile } from "@app/models/files/ContentFile"; import { ContentFile } from "../../models/files/ContentFile";
import { JsonSerializer } from "@app/utilities/JsonSerializer"; import { JsonSerializer } from "../../utilities/JsonSerializer";
import { UrlListingComponent } from "@app/shared/components/url-listing/url-listing.component"; import { UrlListingComponent } from "../../shared/components/url-listing/url-listing.component";
import { UrlListingItem } from "@app/shared/components/url-listing/UrlListingItem"; import { UrlListingItem } from "../../shared/components/url-listing/UrlListingItem";
export class ProjectListingModel implements Serializable<ProjectListingModel> { export class ProjectListingModel implements Serializable<ProjectListingModel> {
public id: String; public id: String;
@ -28,7 +28,7 @@ export class ProjectListingModel implements Serializable<ProjectListingModel> {
this.endDate = new Date(item.enddate); this.endDate = new Date(item.enddate);
this.description = item.description; this.description = item.description;
this.files = JsonSerializer.fromJSONArray(item.files, ContentFile) this.files = JsonSerializer.fromJSONArray(item.files, ContentFile)
this.dmps = JsonSerializer.fromJSONArray(item.dmps,UrlListingItem) this.dmps = JsonSerializer.fromJSONArray(item.dmps, UrlListingItem)
return this; return this;
} }
} }

View File

@ -4,8 +4,8 @@ import { FormGroup, FormBuilder, FormControl, Validators } from "@angular/forms"
import { BackendErrorValidator } from "../../utilities/validators/BackendErrorValidator"; import { BackendErrorValidator } from "../../utilities/validators/BackendErrorValidator";
import { BaseErrorModel } from "../error/BaseErrorModel"; import { BaseErrorModel } from "../error/BaseErrorModel";
import { Status } from "../Status"; import { Status } from "../Status";
import { ContentFile } from "@app/models/files/ContentFile"; import { ContentFile } from "../../models/files/ContentFile";
import { JsonSerializer } from "@app/utilities/JsonSerializer"; import { JsonSerializer } from "../../utilities/JsonSerializer";
export class ProjectModel implements Serializable<ProjectModel> { export class ProjectModel implements Serializable<ProjectModel> {
public id: String; public id: String;
@ -32,7 +32,7 @@ export class ProjectModel implements Serializable<ProjectModel> {
this.endDate = new Date(item.endDate); this.endDate = new Date(item.endDate);
this.description = item.description; this.description = item.description;
this.contentUrl = item.contentUrl; this.contentUrl = item.contentUrl;
this.files = JsonSerializer.fromJSONArray(item.files,ContentFile) this.files = JsonSerializer.fromJSONArray(item.files, ContentFile)
return this; return this;
} }

View File

@ -1,4 +1,4 @@
import { BaseErrorModel } from "@app/models/error/BaseErrorModel"; import { BaseErrorModel } from "../../models/error/BaseErrorModel";
export class UserErrorModel extends BaseErrorModel { export class UserErrorModel extends BaseErrorModel {

View File

@ -12,8 +12,8 @@ import { FormGroup, AbstractControl, FormControl, FormArray } from "@angular/for
import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component"; import { SnackBarNotificationComponent } from "../../shared/components/notificaiton/snack-bar-notification.component";
import { BaseErrorModel } from "../../models/error/BaseErrorModel"; import { BaseErrorModel } from "../../models/error/BaseErrorModel";
import { TdDialogService } from "@covalent/core"; import { TdDialogService } from "@covalent/core";
import { ProjectFileUploaderService } from "@app/services/files/project-file-uploader.service"; import { ProjectFileUploaderService } from "../../services/files/project-file-uploader.service";
import { HostConfiguration } from "@app/app.constants"; import { HostConfiguration } from "../../app.constants";
import { LanguageResolverService } from "../../services/language-resolver/language-resolver.service"; import { LanguageResolverService } from "../../services/language-resolver/language-resolver.service";

View File

@ -8,8 +8,8 @@ import { Router } from "@angular/router";
import { TranslateService } from "@ngx-translate/core"; import { TranslateService } from "@ngx-translate/core";
import { DataSource } from "@angular/cdk/table"; import { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable"; import { Observable } from "rxjs/Observable";
import { ProjectCriteriaComponent } from '@app/shared/components/criteria/projects/projects-criteria.component'; import { ProjectCriteriaComponent } from '../../shared/components/criteria/projects/projects-criteria.component';
import { HostConfiguration } from '@app/app.constants'; import { HostConfiguration } from '../../app.constants';
import { LanguageService } from '../../services/language/language.service'; import { LanguageService } from '../../services/language/language.service';
import { LanguageResolverService } from '../../services/language-resolver/language-resolver.service'; import { LanguageResolverService } from '../../services/language-resolver/language-resolver.service';
@ -130,7 +130,8 @@ export class ProjectDataSource extends DataSource<ProjectListingModel> {
}) })
return item; return item;
}); });
}); })
} }
disconnect() { disconnect() {

View File

@ -1,10 +1,11 @@
import { Component, Input, OnInit, AfterViewChecked, ViewChild } from '@angular/core'; import { Component, Input, OnInit, AfterViewChecked, ViewChild } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http'; import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service'; import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service';
import { HostConfiguration } from '@app/app.constants'; import { HostConfiguration } from '../app.constants';
import { AutocompleteLookupItem } from '@app/models/autocomplete/AutocompleteLookupItem';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { RequestItem } from '../models/criteria/RequestItem';
import { AutocompleteLookupItem } from '../models/auto-complete/AutocompleteLookUpItem';
@Injectable() @Injectable()
export class DatasetProfileService { export class DatasetProfileService {
@ -40,7 +41,7 @@ export class DatasetProfileService {
// return this.restBase.post("datasetprofile/delete", datasetProfile); // return this.restBase.post("datasetprofile/delete", datasetProfile);
} }
queryAutocomplete(lookUpItem: AutocompleteLookupItem): Observable<any> { queryAutocomplete(lookUpItem: RequestItem<AutocompleteLookupItem>): Observable<any> {
return this.httpClient.post(HostConfiguration.Server + "search/autocomplete", lookUpItem) return this.httpClient.post(HostConfiguration.Server + "search/autocomplete", lookUpItem)
} }

View File

@ -10,7 +10,7 @@ import { Observable } from 'rxjs/Observable';
import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataManagementPlanModel'; import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataManagementPlanModel';
import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria'; import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria';
import { RequestItem } from '../../models/criteria/RequestItem'; import { RequestItem } from '../../models/criteria/RequestItem';
import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel'; import { DatasetProfileModel } from '../../models/datasetprofile/DatasetProfileModel';
import { ResponseContentType } from '@angular/http'; import { ResponseContentType } from '@angular/http';

View File

@ -9,7 +9,7 @@ import { DataTableData } from '../../models/data-table/DataTableData';
import { DatasetListingModel } from '../../models/datasets/DatasetListingModel'; import { DatasetListingModel } from '../../models/datasets/DatasetListingModel';
import { DatasetModel } from '../../models/datasets/DatasetModel'; import { DatasetModel } from '../../models/datasets/DatasetModel';
import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria'; import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria';
import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel'; import { DatasetProfileModel } from '../../models/datasetprofile/DatasetProfileModel';
@ -32,12 +32,12 @@ export class DatasetService {
return this.http.post<DataTableData<DatasetListingModel>>(this.actionUrl + 'getPaged', dataTableRequest, { headers: this.headers }); return this.http.post<DataTableData<DatasetListingModel>>(this.actionUrl + 'getPaged', dataTableRequest, { headers: this.headers });
} }
makeDatasetPublic(id: String){ makeDatasetPublic(id: String) {
return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers }) return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers })
} }
getDatasetProfiles(): Observable<DatasetProfileModel[]>{ getDatasetProfiles(): Observable<DatasetProfileModel[]> {
return this.http.get<DatasetProfileModel[]>(HostConfiguration.Server +'datasetprofiles/getAll', { headers: this.headers }) return this.http.get<DatasetProfileModel[]>(HostConfiguration.Server + 'datasetprofiles/getAll', { headers: this.headers })
} }
} }

View File

@ -9,37 +9,37 @@ import { DatasetModel } from '../../models/datasets/DatasetModel';
import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria'; import { DatasetCriteria } from '../../models/criteria/dataset/DatasetCriteria';
import { DatasetProfileModelAdmin } from '../../models/datasetProfileAdmin/DatasetProfileModelAdmin'; import { DatasetProfileModelAdmin } from '../../models/datasetProfileAdmin/DatasetProfileModelAdmin';
import { DatasetListingModel } from '@app/models/datasets/DatasetListingModel'; import { DatasetListingModel } from '../../models/datasets/DatasetListingModel';
@Injectable() @Injectable()
export class DatasetProfileAdmin { export class DatasetProfileAdmin {
private actionUrl: string; private actionUrl: string;
private headers: HttpHeaders; private headers: HttpHeaders;
constructor(private http: BaseHttpService) { constructor(private http: BaseHttpService) {
this.actionUrl = HostConfiguration.Server + 'admin/'; this.actionUrl = HostConfiguration.Server + 'admin/';
this.headers = new HttpHeaders(); this.headers = new HttpHeaders();
this.headers = this.headers.set('Content-Type', 'application/json'); this.headers = this.headers.set('Content-Type', 'application/json');
this.headers = this.headers.set('Accept', 'application/json'); this.headers = this.headers.set('Accept', 'application/json');
} }
createForm(data) { createForm(data) {
return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp', data, { headers: this.headers }); return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp', data, { headers: this.headers });
} }
updateForm(id, data) { updateForm(id, data) {
return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp/' + id, data, { headers: this.headers }) return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp/' + id, data, { headers: this.headers })
} }
getDatasetProfileById(datasetProfileID){ getDatasetProfileById(datasetProfileID) {
return this.http.get<DatasetProfileModelAdmin>(this.actionUrl + 'get/' + datasetProfileID, { headers: this.headers }) return this.http.get<DatasetProfileModelAdmin>(this.actionUrl + 'get/' + datasetProfileID, { headers: this.headers })
} }
getPaged(dataTableRequest: DataTableRequest<DatasetCriteria>): Observable<DataTableData<DatasetListingModel>> {
return this.http.post<DataTableData<DatasetListingModel>>(this.actionUrl + 'datasetprofiles/getPaged', dataTableRequest, { headers: this.headers });
}
getPaged(dataTableRequest: DataTableRequest<DatasetCriteria>): Observable<DataTableData<DatasetListingModel>> {
return this.http.post<DataTableData<DatasetListingModel>>(this.actionUrl + 'datasetprofiles/getPaged', dataTableRequest, { headers: this.headers });
}
} }

View File

@ -5,9 +5,9 @@ import { HostConfiguration } from './../../app.constants';
import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service'; import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel'; import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel';
import { BaseCriteria } from '@app/models/criteria/BaseCriteria'; import { BaseCriteria } from '../../models/criteria/BaseCriteria';
import { RequestItem } from '@app/models/criteria/RequestItem'; import { RequestItem } from '../../models/criteria/RequestItem';
import { ResearcherCriteria } from '@app/models/criteria/researchers/ResearcherCriteria'; import { ResearcherCriteria } from '../../models/criteria/researchers/ResearcherCriteria';
@Injectable() @Injectable()

View File

@ -5,11 +5,11 @@ import { HostConfiguration } from './../../app.constants';
import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service'; import { BaseHttpService } from '../../utilities/cite-http-service-module/base-http.service';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel'; import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel';
import { BaseCriteria } from '@app/models/criteria/BaseCriteria'; import { BaseCriteria } from '../../models/criteria/BaseCriteria';
import { RequestItem } from '@app/models/criteria/RequestItem'; import { RequestItem } from '../../models/criteria/RequestItem';
import { ResearcherCriteria } from '@app/models/criteria/researchers/ResearcherCriteria'; import { ResearcherCriteria } from '../../models/criteria/researchers/ResearcherCriteria';
import { FileUploader } from '@app/shared/components/file-uploader/FileUploader'; import { FileUploader } from '../../shared/components/file-uploader/FileUploader';
import { ContentFile } from '@app/models/files/ContentFile'; import { ContentFile } from '../../models/files/ContentFile';
@Injectable() @Injectable()

View File

@ -7,7 +7,7 @@ import { Injectable } from "@angular/core";
import { HttpHeaders } from '@angular/common/http'; import { HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { RequestItem } from '../../models/criteria/RequestItem'; import { RequestItem } from '../../models/criteria/RequestItem';
import { ResearcherModel } from '@app/models/researcher/ResearcherModel'; import { ResearcherModel } from '../../models/researcher/ResearcherModel';
@Injectable() @Injectable()
export class ResearcherService { export class ResearcherService {

View File

@ -18,6 +18,7 @@ export class AutoCompleteComponent implements OnInit, ErrorStateMatcher {
@Input() required = false; @Input() required = false;
@Input() displayFunction: Function; @Input() displayFunction: Function;
@Input() assignValueFunction: Function; @Input() assignValueFunction: Function;
@Input() transformFunction: Function;
@Input() inputData: AutoCompleteConfiguration; @Input() inputData: AutoCompleteConfiguration;
@Input() validationErrorString: String; @Input() validationErrorString: String;
@ -75,12 +76,17 @@ export class AutoCompleteComponent implements OnInit, ErrorStateMatcher {
} }
printText(item: any): string { printText(item: any): string {
if (this.displayFunction) return this.displayFunction(item); if (this.displayFunction) {
return this.displayFunction(item)
}
else return item; else return item;
} }
getValue(item: any): string { getValue(item: any): string {
if (this.assignValueFunction) return this.assignValueFunction(item); if (this.assignValueFunction) {
if (this.transformFunction) return this.assignValueFunction(this.transformFunction(item))
else return this.assignValueFunction(item)
}
else return item; else return item;
} }

View File

@ -1,5 +1,5 @@
import { Observable } from "rxjs"; import { Observable } from "rxjs";
import { ContentFile } from "@app/models/files/ContentFile"; import { ContentFile } from "../../../models/files/ContentFile";
export interface FileUploader { export interface FileUploader {
uploadFile(formData: FormData): Observable<ContentFile>; uploadFile(formData: FormData): Observable<ContentFile>;

View File

@ -1,5 +1,5 @@
import { Component, Input, OnInit } from "@angular/core"; import { Component, Input, OnInit } from "@angular/core";
import { FileUploader } from "@app/shared/components/file-uploader/FileUploader"; import { FileUploader } from "../../../shared/components/file-uploader/FileUploader";
import { FormControl } from "@angular/forms"; import { FormControl } from "@angular/forms";
@Component({ @Component({
@ -7,7 +7,7 @@ import { FormControl } from "@angular/forms";
templateUrl: './file-uploader.component.html' templateUrl: './file-uploader.component.html'
}) })
export class FileUploaderComponent implements OnInit { export class FileUploaderComponent implements OnInit {
files: File | FileList; files: File | FileList;
disabled: boolean = false; disabled: boolean = false;

View File

@ -8,7 +8,7 @@
<button *ngIf="isAdmin()" mat-button class="navbar-button" routerLink="/dmp-profiles">{{'NAV-BAR.DMP-PROFILES' | translate}}</button> <button *ngIf="isAdmin()" mat-button class="navbar-button" routerLink="/dmp-profiles">{{'NAV-BAR.DMP-PROFILES' | translate}}</button>
<button *ngIf="isAdmin()" mat-button class="navbar-button" routerLink="/datasetsProfiles">{{'NAV-BAR.DATASETS-ADMIN' | translate}}</button> <button *ngIf="isAdmin()" mat-button class="navbar-button" routerLink="/datasetsProfiles">{{'NAV-BAR.DATASETS-ADMIN' | translate}}</button>
</div> </div>
<button mat-button class="navbar-button" routerLink="/about">{{'NAV-BAR.ABOUT' | translate}}</button> <!--<button mat-button class="navbar-button" routerLink="/about">{{'NAV-BAR.ABOUT' | translate}}</button>-->
<span class="navbar-spacer"></span> <span class="navbar-spacer"></span>
<div *ngIf="isAuthenticated();else loginoption"> <div *ngIf="isAuthenticated();else loginoption">

View File

@ -1,7 +1,7 @@
import { Serializable } from "@app/models/Serializable"; import { Serializable } from "../../../models/Serializable";
export class UrlListingItem implements Serializable<UrlListingItem>{ export class UrlListingItem implements Serializable<UrlListingItem>{
public label: string; public label: string;
public url: string; public url: string;
public all: string; public all: string;

View File

@ -1,4 +1,4 @@
<div *ngFor="let item of items | limitTo:urlLimit"> <div *ngFor="let item of items | limitTo:urlLimit">
<a [href]="item.url">{{item.label}}</a> <a (click)="navigate(item.url)">{{item.label}}</a>
</div> </div>
<a *ngIf="this.items.length > this.urlLimit" [href]="items[0].all">{{'URL-LISTING-COMPONENT.SHOW-MORE'|translate}}</a> <a *ngIf="this.items.length > this.urlLimit" (click)="navigate(items[0].all)">{{'URL-LISTING-COMPONENT.SHOW-MORE'|translate}}</a>

View File

@ -1,5 +1,6 @@
import { Component, Input } from "@angular/core"; import { Component, Input } from "@angular/core";
import { UrlListingItem } from "@app/shared/components/url-listing/UrlListingItem"; import { UrlListingItem } from "../../../shared/components/url-listing/UrlListingItem";
import { Router } from "@angular/router";
@Component({ @Component({
selector: 'app-url-listing', selector: 'app-url-listing',
@ -13,7 +14,14 @@ export class UrlListingComponent {
@Input() @Input()
urlLimit: number = 3; urlLimit: number = 3;
constructor(private router: Router) { }
ngOnInit() { ngOnInit() {
console.log(this.items.length > this.urlLimit) console.log(this.items.length > this.urlLimit)
} }
navigate(link: string) {
this.router.navigateByUrl(link);
}
} }

View File

@ -1,13 +1,28 @@
<div [formGroup]="form"> <div [formGroup]="form">
<div formGroupName="data" class="form-row"> <div formGroupName="data" class="form-row">
<div class="form-group col-md-12" > <div class="form-group col-md-12">
<label>Label</label> <label>Label</label>
<input type="string" class="form-control" formControlName="label"> <input type="string" class="form-control" formControlName="label">
</div> </div>
<div class="form-group col-md-12" > <div class="form-group col-md-12">
<label>Url</label> <label>Url</label>
<input type="string" class="form-control" formControlName="url"> <input type="string" class="form-control" formControlName="url">
</div> </div>
<div class="form-group col-md-12">
<label>Options Root</label>
<input type="string" class="form-control" formControlName="optionsRoot">
</div>
<div formGroupName="autoCompleteOptions" class="form-group col-md-12">
<div class="form-group col-md-6">
<label>Label</label>
<input type="string" class="form-control" formControlName="label">
</div>
<div class="form-group col-md-6">
<label>Value</label>
<input type="string" class="form-control" formControlName="value">
</div>
</div>
</div> </div>
</div> </div>

View File

@ -2,19 +2,19 @@
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'autocomplete-component', selector: 'autocomplete-component',
templateUrl: './autocomplete-component.html' templateUrl: './autocomplete-component.html'
}) })
export class AutocompleteComponent implements OnInit{ export class AutocompleteComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data:AutocompleteData = new AutocompleteData(); private data: AutocompleteData = new AutocompleteData();
ngOnInit(){ ngOnInit() {
this.data.type= "autocomplete"; this.data.type = "autocomplete";
let autocomplete: AutocompleteData = new AutocompleteData(); let autocomplete: AutocompleteData = new AutocompleteData();
//this.dataModel.data = new JsonSerializer<AutocompleteData>().fromJSONObject(this.data,AutocompleteData); //this.dataModel.data = new JsonSerializer<AutocompleteData>().fromJSONObject(this.data,AutocompleteData);
//(<FormArray>this.form.get("data")).push(autocomplete.buildForm()); //(<FormArray>this.form.get("data")).push(autocomplete.buildForm());

View File

@ -3,18 +3,18 @@ import { BooleanDecisionData } from '../../../models/DataField/BooleanDecisionDa
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'booleanDecision-component', selector: 'booleanDecision-component',
templateUrl: './booleanDecision-component.html' templateUrl: './booleanDecision-component.html'
}) })
export class BooleanDecisionComponent implements OnInit{ export class BooleanDecisionComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data:BooleanDecisionData = new BooleanDecisionData(); private data: BooleanDecisionData = new BooleanDecisionData();
ngOnInit(){ ngOnInit() {
this.form.addControl("data", this.data.buildForm()); this.form.addControl("data", this.data.buildForm());
} }
} }

View File

@ -3,18 +3,18 @@ import { BooleanDecisionData } from '../../../models/DataField/BooleanDecisionDa
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'checkbox-component', selector: 'checkbox-component',
templateUrl: './checkbox-component.html' templateUrl: './checkbox-component.html'
}) })
export class CheckBoxComponent implements OnInit{ export class CheckBoxComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data:CheckBoxData = new CheckBoxData(); private data: CheckBoxData = new CheckBoxData();
ngOnInit(){ ngOnInit() {
this.form.addControl("data", this.data.buildForm()); this.form.addControl("data", this.data.buildForm());
} }
} }

View File

@ -1,25 +1,25 @@
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'combobox-component', selector: 'combobox-component',
templateUrl: './combobox-component.html' templateUrl: './combobox-component.html'
}) })
export class ComboboxComponent implements OnInit{ export class ComboboxComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
type: string; type: string;
options = [{id:"autocomplete", value: "autocomplete"}, {id:"wordlist", value: "wordlist"}]; options = [{ id: "autocomplete", value: "autocomplete" }, { id: "wordlist", value: "wordlist" }];
ngOnInit(){ ngOnInit() {
if (this.dataModel.data && this.form.get("data")){ if (this.dataModel.data && this.form.get("data")) {
this.type = this.form.get("data").get("type").value; this.type = this.form.get("data").get("type").value;
} }
} }
onchangeCombo(){ onchangeCombo() {
if (this.form.get("data")) this.form.removeControl("data"); if (this.form.get("data")) this.form.removeControl("data");
} }
} }

View File

@ -4,18 +4,18 @@ import { BooleanDecisionData } from '../../../models/DataField/BooleanDecisionDa
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'freetext-component', selector: 'freetext-component',
templateUrl: './freetext-component.html' templateUrl: './freetext-component.html'
}) })
export class FreeTextComponent implements OnInit{ export class FreeTextComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data:FreeTextData = new FreeTextData(); private data: FreeTextData = new FreeTextData();
ngOnInit(){ ngOnInit() {
this.form.addControl("data", this.data.buildForm()); this.form.addControl("data", this.data.buildForm());
} }
} }

View File

@ -4,30 +4,30 @@ import { RadioBoxData } from '../../../models/DataField/RadioBoxData';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { ListingItem } from '../../../models/Common/ListingItem'; import { ListingItem } from '../../../models/Common/ListingItem';
import { JsonSerializer } from '../../../utilities/JsonSerializer'; import { JsonSerializer } from '../../../utilities/JsonSerializer';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'radiobox-component', selector: 'radiobox-component',
templateUrl: './radiobox-component.html' templateUrl: './radiobox-component.html'
}) })
export class RadioBoxComponent implements OnInit{ export class RadioBoxComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data: RadioBoxData = new RadioBoxData(); private data: RadioBoxData = new RadioBoxData();
private options = new Array<ListingItem>(); private options = new Array<ListingItem>();
ngOnInit(){ ngOnInit() {
//if (this.form.get("data")) this.form.removeControl("data"); //if (this.form.get("data")) this.form.removeControl("data");
if (!this.form.get("data")) if (!this.form.get("data"))
this.form.addControl("data", this.data.buildForm()); this.form.addControl("data", this.data.buildForm());
if(!this.dataModel.data) this.addNewRow(); if (!this.dataModel.data) this.addNewRow();
} }
addNewRow(){ addNewRow() {
let radioListOptions:ListingItem = new ListingItem(); let radioListOptions: ListingItem = new ListingItem();
(<FormArray>this.form.get("data").get("options")).push(radioListOptions.buildForm()); (<FormArray>this.form.get("data").get("options")).push(radioListOptions.buildForm());
this.data.options = []; this.data.options = [];
this.data.options.push(radioListOptions); this.data.options.push(radioListOptions);
this.dataModel.data = JsonSerializer.fromJSONObject(this.data,RadioBoxData); this.dataModel.data = JsonSerializer.fromJSONObject(this.data, RadioBoxData);
} }
} }

View File

@ -5,18 +5,18 @@ import { BooleanDecisionData } from '../../../models/DataField/BooleanDecisionDa
import { FormGroup } from '@angular/forms'; import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'textarea-component', selector: 'textarea-component',
templateUrl: './textarea-component.html' templateUrl: './textarea-component.html'
}) })
export class TextAreaComponent implements OnInit{ export class TextAreaComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data:TextArea = new TextArea(); private data: TextArea = new TextArea();
ngOnInit(){ ngOnInit() {
this.form.addControl("data", this.data.buildForm()); this.form.addControl("data", this.data.buildForm());
} }
} }

View File

@ -4,31 +4,31 @@ import { WordListData } from '../../../models/DataField/WordListData';
import { FormArray } from '@angular/forms'; import { FormArray } from '@angular/forms';
import { ListingItem } from '../../../models/Common/ListingItem'; import { ListingItem } from '../../../models/Common/ListingItem';
import { JsonSerializer } from '../../../utilities/JsonSerializer'; import { JsonSerializer } from '../../../utilities/JsonSerializer';
import { Field } from '@app/models/datasetProfileAdmin/Field'; import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({ @Component({
selector: 'wordlist-component', selector: 'wordlist-component',
templateUrl: './wordlist-component.html' templateUrl: './wordlist-component.html'
}) })
export class WordlistComponent implements OnInit{ export class WordlistComponent implements OnInit {
@Input() dataModel: Field; @Input() dataModel: Field;
@Input() form: FormGroup; @Input() form: FormGroup;
private data: WordListData = new WordListData(); private data: WordListData = new WordListData();
private options = new Array<ListingItem>(); private options = new Array<ListingItem>();
ngOnInit(){ ngOnInit() {
this.data.type = "wordlist"; this.data.type = "wordlist";
// if (this.form.get("data")) this.form.removeControl("data"); // if (this.form.get("data")) this.form.removeControl("data");
this.form.addControl("data", this.data.buildForm()); this.form.addControl("data", this.data.buildForm());
if(!this.dataModel.data) if (!this.dataModel.data)
this.addNewRow(); this.addNewRow();
} }
addNewRow(){ addNewRow() {
let wordListOptions:ListingItem = new ListingItem(); let wordListOptions: ListingItem = new ListingItem();
(<FormArray>this.form.get("data").get("options")).push(wordListOptions.buildForm()); (<FormArray>this.form.get("data").get("options")).push(wordListOptions.buildForm());
this.data.options = []; this.data.options = [];
this.data.options.push(wordListOptions); this.data.options.push(wordListOptions);
this.dataModel.data = JsonSerializer.fromJSONObject(this.data,WordListData); this.dataModel.data = JsonSerializer.fromJSONObject(this.data, WordListData);
} }
} }

View File

@ -12,10 +12,10 @@ import { ProjectCriteriaComponent } from './components/criteria/projects/project
import { DatasetCriteriaComponent } from './components/criteria/datasets/datasets-criteria.component'; import { DatasetCriteriaComponent } from './components/criteria/datasets/datasets-criteria.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DataManagementPlanCriteriaComponent } from './components/criteria/data-management-plan/dmp-criteria.component'; import { DataManagementPlanCriteriaComponent } from './components/criteria/data-management-plan/dmp-criteria.component';
import { AutocompleteChipComponent } from '@app/shared/components/autocompleteChips/autocompleteChips.component'; import { AutocompleteChipComponent } from '../shared/components/autocompleteChips/autocompleteChips.component';
import { FileUploaderComponent } from '@app/shared/components/file-uploader/file-uploader.component'; import { FileUploaderComponent } from '../shared/components/file-uploader/file-uploader.component';
import { UrlListingComponent } from '@app/shared/components/url-listing/url-listing.component'; import { UrlListingComponent } from '../shared/components/url-listing/url-listing.component';
import { NgForLimitPipe } from '@app/shared/pipes/ngforlimit/NgForLimit.pipe'; import { NgForLimitPipe } from '../shared/pipes/ngforlimit/NgForLimit.pipe';
import { DataManagementPlanProfileCriteriaComponent } from './components/criteria/datamanagementplanprofile/dmp-profile-criteria.component'; import { DataManagementPlanProfileCriteriaComponent } from './components/criteria/datamanagementplanprofile/dmp-profile-criteria.component';
import { AutoCompleteComponent } from './components/auto-complete/auto-complete.component'; import { AutoCompleteComponent } from './components/auto-complete/auto-complete.component';

View File

@ -10,7 +10,7 @@ import { LoginService } from './utilties/login-service';
import { LoginComponent } from './login/login.component'; import { LoginComponent } from './login/login.component';
import { ModuleWithProviders, NgModule } from "@angular/core"; import { ModuleWithProviders, NgModule } from "@angular/core";
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { AdminLoginComponent } from '@app/user-management/admin-login/admin-login.component'; import { AdminLoginComponent } from '../user-management/admin-login/admin-login.component';
@NgModule({ @NgModule({
imports: [ imports: [

View File

@ -2,7 +2,7 @@ import { TwitterLoginComponent } from './login/twitter-login/twitter-login.compo
import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component'; import { LinkedInLoginComponent } from './login/linkedin-login/linkedin-login.component';
import { LoginComponent } from './login/login.component'; import { LoginComponent } from './login/login.component';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
import { AdminLoginComponent } from '@app/user-management/admin-login/admin-login.component'; import { AdminLoginComponent } from '../user-management/admin-login/admin-login.component';
const routes: Routes = [ const routes: Routes = [
{ path: 'login', component: LoginComponent }, { path: 'login', component: LoginComponent },

View File

@ -13,7 +13,7 @@ import { Principal } from '../../models/login/Principal';
import { MatPaginator, MatSort, MatSnackBar } from '@angular/material'; import { MatPaginator, MatSort, MatSnackBar } from '@angular/material';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { DataSource } from '@angular/cdk/table'; import { DataSource } from '@angular/cdk/table';
import { RecentActivityTypes } from '@app/users/activity/RecentActivityTypes'; import { RecentActivityTypes } from '../../users/activity/RecentActivityTypes';
@Component({ @Component({
@ -25,7 +25,7 @@ import { RecentActivityTypes } from '@app/users/activity/RecentActivityTypes';
] ]
}) })
export class RecentActivityComponent implements OnInit { export class RecentActivityComponent implements OnInit {
activities: any[]; activities: any[];
constructor( constructor(

View File

@ -11,7 +11,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { UsersComponent } from './components/users.component'; import { UsersComponent } from './components/users.component';
import { UsersRoutes } from './users.routes'; import { UsersRoutes } from './users.routes';
import { UserRoleEditorComponent } from './components/roles/user-role-editor.component'; import { UserRoleEditorComponent } from './components/roles/user-role-editor.component';
import { RecentActivityComponent } from '@app/users/activity/recent-activity.component'; import { RecentActivityComponent } from '../users/activity/recent-activity.component';
@NgModule({ @NgModule({
imports: [ imports: [
@ -26,8 +26,7 @@ import { RecentActivityComponent } from '@app/users/activity/recent-activity.com
} }
}), }),
ReactiveFormsModule, ReactiveFormsModule,
MaterialModule, MaterialModule
RecentActivityComponent
], ],
declarations: [ declarations: [
@ -38,7 +37,9 @@ import { RecentActivityComponent } from '@app/users/activity/recent-activity.com
], ],
exports: [ exports: [
UsersComponent UsersComponent,
RecentActivityComponent
] ]
}) })

View File

@ -10,7 +10,7 @@ import { HttpClient } from '@angular/common/http';
import { AuthService } from '../../services/auth/auth.service'; import { AuthService } from '../../services/auth/auth.service';
import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component'; import { SnackBarNotificationComponent } from '../../shared/components/notificaiton/snack-bar-notification.component';
import { BaseHttpResponseModel } from '../../models/http/BaseHttpResponseModel'; import { BaseHttpResponseModel } from '../../models/http/BaseHttpResponseModel';
import { ApiResponseCode } from '@app/utilities/types/ApiResponseCode'; import { ApiResponseCode } from '../../utilities/types/ApiResponseCode';
@Injectable() @Injectable()
export class BaseHttpService { export class BaseHttpService {
@ -91,6 +91,9 @@ export class BaseHttpService {
}) })
return Observable.throw(errorResponse); return Observable.throw(errorResponse);
} }
else if (error.statusCode == ApiMessageCode.VALIDATION_MESSAGE) {
return Observable.throw(errorResponse);
}
else { else {
this.snackBar.openFromComponent(SnackBarNotificationComponent, { this.snackBar.openFromComponent(SnackBarNotificationComponent, {
data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language }, data: { message: 'GENERAL.ERRORS.HTTP-REQUEST-ERROR', language: this.language },

View File

@ -3,5 +3,7 @@ export enum ApiMessageCode {
SUCCESS_MESSAGE = 200, SUCCESS_MESSAGE = 200,
WARN_MESSAGE = 300, WARN_MESSAGE = 300,
ERROR_MESSAGE = 400, ERROR_MESSAGE = 400,
DEFAULT_ERROR_MESSAGE = 444 DEFAULT_ERROR_MESSAGE = 444,
VALIDATION_MESSAGE = 445
} }

View File

@ -13,6 +13,8 @@ export class VisibilityRulesService {
public isElementVisible(pathKey: string, id: string) { public isElementVisible(pathKey: string, id: string) {
if (!this.fieldsPathMemory[id] && pathKey) this.fieldsPathMemory[id] = pathKey; if (!this.fieldsPathMemory[id] && pathKey) this.fieldsPathMemory[id] = pathKey;
if (pathKey && this.visibilityRuleContext.getRulesFromKey(id)) this.evaluateVisibility(this.visibilityRuleContext.getRulesFromKey(id))
if (this.checkElementVisibility(id)) { if (this.checkElementVisibility(id)) {
return true return true
} else { } else {
@ -29,7 +31,6 @@ export class VisibilityRulesService {
public buildVisibilityRules(item: Array<Rule>) { public buildVisibilityRules(item: Array<Rule>) {
this.visibilityRuleContext = new VisibilityRulesContext(); this.visibilityRuleContext = new VisibilityRulesContext();
this.visibilityRuleContext.buildVisibilityRuleContext(item); this.visibilityRuleContext.buildVisibilityRuleContext(item);
this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item))
} }
public updateValueAndVisibility(id: string) { public updateValueAndVisibility(id: string) {
@ -40,12 +41,20 @@ export class VisibilityRulesService {
private evaluateVisibility(visibilityRule: VisibilityRule) { private evaluateVisibility(visibilityRule: VisibilityRule) {
for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) { for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) {
let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId]; let pathKey = this.fieldsPathMemory[visibilityRule.sourceVisibilityRules[i].sourceControlId];
if (this.formGroup.get(pathKey + '.value') && (!this.formGroup.get(pathKey + '.value').value || ""+this.formGroup.get(pathKey + '.value').value != ""+visibilityRule.sourceVisibilityRules[i].sourceControlValue)) { if (this.formGroup.get(pathKey + '.value') && ((this.formGroup.get(pathKey + '.value').value == null || this.formGroup.get(pathKey + '.value').value == undefined) || "" + this.formGroup.get(pathKey + '.value').value != "" + visibilityRule.sourceVisibilityRules[i].sourceControlValue)) {
this.elementVisibilityMap.set(visibilityRule.targetControlId, false) if (this.formGroup.get(pathKey).parent.get("id")) {
return; if (!this.checkElementVisibility(this.formGroup.get(pathKey).parent.get("id").value)) {
this.elementVisibilityMap.set(visibilityRule.targetControlId, false)
return;
}
}
else {
this.elementVisibilityMap.set(visibilityRule.targetControlId, false)
return;
}
} }
this.elementVisibilityMap.set(visibilityRule.targetControlId, true)
} }
this.elementVisibilityMap.set(visibilityRule.targetControlId, true)
} }
private getParentPath(parentId: string): string { private getParentPath(parentId: string): string {

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Some files were not shown because too many files have changed in this diff Show More