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/web/target/
*.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>
<artifactId>data</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>eu.eudat</groupId>

View File

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

View File

@ -5,7 +5,8 @@
<groupId>eu.eudat</groupId>
<artifactId>dmp-backend</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
@ -15,12 +16,15 @@
<modules>
<module>queryable</module>
<module>web</module>
<module>data</module>
</modules>
<properties>
<project.http.version>1.19.0</project.http.version>
<project.oauth.version>1.19.0</project.oauth.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>
<org.springframework.version>4.3.8.RELEASE</org.springframework.version>
@ -51,7 +55,15 @@
<artifactId>json</artifactId>
<version>20160810</version>
</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>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
@ -84,11 +96,7 @@
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.3</version>
</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 -->
<dependency>
@ -106,97 +114,7 @@
<!-- g/a spring -->
<!-- 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 -->
<dependency>
@ -255,42 +173,6 @@
</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>
<profile>
@ -322,4 +204,5 @@
</activation>
</profile>
</profiles>
</project>

View File

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

View File

@ -7,6 +7,7 @@
<groupId>dmp-backend</groupId>
<artifactId>web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>${packaging.type}</packaging>
<parent>
<groupId>eu.eudat</groupId>
@ -25,5 +26,118 @@
<artifactId>queryable</artifactId>
<version>1.0-SNAPSHOT</version>
</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>
<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>

View File

@ -29,7 +29,7 @@ public class CommonController {
@RequestMapping(method = RequestMethod.GET, value = {"/language"}, produces = "application/json")
public @ResponseBody
ResponseEntity<ResponseItem<List<Language>>> getPaged(Principal principal) {
ResponseEntity<ResponseItem<List<Language>>> getPaged() {
try {
List<Language> language = this.dynamicProjectConfiguration.getConfiguration().getMainExternalField().getLanguage();
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;
import eu.eudat.data.dao.criteria.RequestItem;
import eu.eudat.managers.DatasetProfileManager;
import eu.eudat.managers.UserManager;
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.responses.ResponseItem;
import eu.eudat.models.properties.PropertiesModel;
@ -18,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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")
public ResponseEntity<Object> getDataForAutocomplete(@RequestBody AutoCompleteLookupItem lookupItem) {
public ResponseEntity<Object> getDataForAutocomplete(@RequestBody RequestItem<AutoCompleteLookupItem> lookupItem) {
try {
eu.eudat.data.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getProfileID()));
eu.eudat.models.entities.xmlmodels.datasetprofiledefinition.Field modelfield = DatasetProfileManager.queryForField(dataset.getProfile().getDefinition(), lookupItem.getFieldID());
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.getCriteria().getFieldID());
AutoCompleteData data = (AutoCompleteData) modelfield.getData();
RestTemplate restTemplate = new RestTemplate();
Map<String, Object> items = restTemplate.getForObject(data.getUrl() + "?query=" + lookupItem.getSearchTerm(), Map.class);
List<Tuple<String, String>> items = DatasetProfileManager.getAutocomplete(data,lookupItem.getCriteria().getLike());
return ResponseEntity.status(HttpStatus.OK).body(items);
} catch (Exception ex) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: " + ex.getMessage());

View File

@ -1,6 +1,8 @@
package eu.eudat.controllers.controllerhandler;
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.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
@ -30,14 +32,14 @@ public class ControllerErrorHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ValidationErrorContext processValidationError(MethodArgumentNotValidException ex) {
public ResponseItem<ValidationErrorContext> processValidationError(MethodArgumentNotValidException ex) {
BindingResult result = ex.getBindingResult();
List<FieldError> fieldErrors = result.getFieldErrors();
return processFieldErrors(fieldErrors);
}
private ValidationErrorContext processFieldErrors(List<FieldError> fieldErrors) {
private ResponseItem<ValidationErrorContext> processFieldErrors(List<FieldError> fieldErrors) {
ValidationErrorContext dto = new ValidationErrorContext();
for (FieldError fieldError : fieldErrors) {
@ -45,7 +47,7 @@ public class ControllerErrorHandler {
dto.addFieldError(fieldError.getField(), localizedErrorMessage);
}
return dto;
return new ResponseItem<ValidationErrorContext>().status(ApiMessageCode.VALIDATION_MESSAGE).payload(dto);
}
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.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;
@ -17,10 +18,12 @@ import java.util.LinkedList;
import java.util.List;
/**
* Created by ikalyvas on 3/23/2018.
* Created by ikalyvas on 5/4/2018.
*/
@Service("dynamicProjectConfiguration")
public class DynamicProjectConfigurationImpl implements DynamicProjectConfiguration {
@Profile("devel")
public class DynamicProjectConfigurationDevelImpl implements DynamicProjectConfiguration {
private Configuration configuration;
@ -29,7 +32,7 @@ public class DynamicProjectConfigurationImpl implements DynamicProjectConfigurat
private Environment environment;
@Autowired
public DynamicProjectConfigurationImpl(Environment environment) {
public DynamicProjectConfigurationDevelImpl(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;
import com.jayway.jsonpath.DocumentContext;
import com.jayway.jsonpath.JsonPath;
import eu.eudat.builders.model.models.DataTableDataBuilder;
import eu.eudat.data.dao.entities.DatasetProfileDao;
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.models.datasetprofile.DatasetProfileListingModel;
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.queryable.QueryableList;
import eu.eudat.services.ApiContext;
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.Element;
import javax.xml.xpath.*;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
public class DatasetProfileManager {
@ -52,4 +61,20 @@ public class DatasetProfileManager {
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> {
private String url;
private Option autoCompleteOptions;
private String optionsRoot;
public String getOptionsRoot() {
return optionsRoot;
}
public void setOptionsRoot(String optionsRoot) {
this.optionsRoot = optionsRoot;
}
public String getUrl() {
return url;
}
@ -31,6 +40,7 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
Element root = super.toXml(doc);
root.setAttribute("url", this.url);
root.setAttribute("optionsRoot", this.optionsRoot);
Element element = doc.createElement("option");
element.setAttribute("label", this.autoCompleteOptions.getLabel());
element.setAttribute("value", autoCompleteOptions.getValue());
@ -42,6 +52,7 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
public AutoCompleteData fromXml(Element item) {
super.fromXml(item);
this.url = item.getAttribute("url");
this.optionsRoot = item.getAttribute("optionsRoot");
Element optionElement = (Element) item.getElementsByTagName("option").item(0);
if (optionElement != null) {
this.autoCompleteOptions = new Option();
@ -57,7 +68,8 @@ public class AutoCompleteData extends ComboBoxData<AutoCompleteData> {
this.autoCompleteOptions = new Option();
if (data != null) {
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) {
this.autoCompleteOptions.setLabel(options.get("label"));
this.autoCompleteOptions.setValue(options.get("value"));

View File

@ -1,9 +1,10 @@
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 fieldID;
private String searchTerm;
public String getProfileID() {
return profileID;
@ -21,11 +22,4 @@ public class AutoCompleteLookupItem {
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.properties.PropertiesGenerator;
import eu.eudat.models.user.composite.PropertiesModelBuilder;
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
import eu.eudat.utilities.builders.ModelBuilder;
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
import java.util.*;
import java.util.stream.Collectors;
@ -79,6 +79,7 @@ public class FieldSet implements Comparable, PropertiesModelBuilder, ViewStyleDe
}
public List<FieldSet> getMultiplicityItems() {
if (multiplicityItems != null) Collections.sort(multiplicityItems);
return multiplicityItems;
}

View File

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

View File

@ -31,7 +31,7 @@ public class DevelConfigLoader implements ConfigLoader {
JAXBContext jaxbContext = JAXBContext.newInstance(ExternalUrls.class);
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);
} catch (Exception ex) {

View File

@ -1,7 +1,7 @@
package eu.eudat.types;
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;

View File

@ -16,7 +16,7 @@ public class ProjectTableRequestValidator implements Validator {
@Override
public void validate(Object obj, Errors errors) {
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");
}
if (projectTableRequest.getOffset() < 0) {

View File

@ -16,6 +16,8 @@ production.database.password=dmpt00lu$r
###################Allowed Proxy Service Host ############################
eu.eudat.proxy.allowed.host=https://eestore.paas2.uninett.no
configuration.externalUrls=/classes/ExternalUrls.xml
configuration.dynamicProjectUrl=/classes/ProjectConfiguration.xml
#######################################################
########################/Email#############################
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",
"version": "0.0.0",
"license": "MIT",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
@ -33,7 +33,7 @@
"zone.js": "^0.8.17"
},
"devDependencies": {
"@angular/cli": "1.6.1",
"@angular/cli": "1.7.4",
"@angular/compiler-cli": "^5.1.1",
"@angular/language-service": "^5.1.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 { Params, ActivatedRoute, Router } from '@angular/router';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { ResearcherModel } from '@app/models/researcher/ResearcherModel';
import { ResearcherService } from '@app/services/researchers/researchers.service';
import { ResearcherModel } from '../models/researcher/ResearcherModel';
import { ResearcherService } from '../services/researchers/researchers.service';
@Component({
selector: 'add-researchers-component',

View File

@ -5,7 +5,7 @@ import { RouterModule, Routes } from '@angular/router';
import { HomepageComponent } from './homepage/homepage.component';
import { AuthGuard } from './guards/auth.guard';
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';
const appRoutes: Routes = [

View File

@ -30,11 +30,11 @@ import { PageNotFoundComponent } from './not-found.component';
import { AppComponent } from './app.component';
import { NgModule } from "@angular/core";
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 { HelpContentComponent } from './help-content/help-content.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 { 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 { Params, ActivatedRoute, Router } from '@angular/router';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { DatasetService } from '@app/services/dataset/dataset.service';
import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel';
import { DatasetProfileModule } from '@app/dataset-profile-form/dataset-profile.module';
import { DatasetService } from '../services/dataset/dataset.service';
import { DatasetProfileModel } from '../models/datasetprofile/DatasetProfileModel';
import { DatasetProfileModule } from '../dataset-profile-form/dataset-profile.module';
@Component({
selector: 'available-profiles-component',

View File

@ -28,10 +28,11 @@
</mat-form-field>
</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">
<mat-form-field class="full-width">
<input matInput type="number" placeholder="Ordinal" formControlName="ordinal">
</mat-form-field>
<mat-form-field class="full-width">
<input matInput type="string" placeholder="Id" formControlName="id">
</mat-form-field>

View File

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

View File

@ -1,6 +1,6 @@
import { NgModule } from "@angular/core";
import { CommonModule } from '@angular/common';
import { FormsModule,ReactiveFormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DatasetProfileRoutes } from "./dataset-profile.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 { AutocompleteComponent } from '../shared/componentsAdmin/autocomplete/autocomplete-component';
import { ComboboxComponent } from '../shared/componentsAdmin/combobox/combobox-component';
import { SharedModule } from "@app/shared/shared.module";
import { SharedModule } from "../shared/shared.module";
@NgModule({
imports: [
@ -71,7 +71,7 @@ import { SharedModule } from "@app/shared/shared.module";
WordlistComponent,
RadioBoxComponent
],
providers:[
providers: [
]
})

View File

@ -1,9 +1,9 @@

import { Component, Input } from '@angular/core';
import { FormGroup, FormControl, FormArray } from '@angular/forms';
import { ValidationTypes } from '@app/models/common/ValidationTypes';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Rule } from '@app/models/datasetProfileAdmin/Rule';
import { ValidationTypes } from '../../models/common/ValidationTypes';
import { Field } from '../../models/datasetProfileAdmin/Field';
import { Rule } from '../../models/datasetProfileAdmin/Rule';
@Component({
selector: 'field-form',
@ -20,7 +20,7 @@ export class FieldFormComponent {
isFieldMultiplicityEnabled: boolean = false;
constructon() {
}
}
ngOnInit() {
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 { Router, ActivatedRoute, ParamMap, Params } from '@angular/router';
import { PageFormComponent } from '../page-form/page-component'
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service';
import { Section } from '@app/models/datasetProfileAdmin/Section';
import { DatasetProfileAdmin } from '../../services/datasetProfileAdmin/datasetProfileAfmin.service';
import { Section } from '../../models/datasetProfileAdmin/Section';
@Component({
selector: 'form-comp',
templateUrl: './form.component.html',
providers:[DatasetProfileAdmin, DatasetProfileService],
providers: [DatasetProfileAdmin, DatasetProfileService],
styleUrls: ['./form.component.scss']
})
@ -25,7 +25,7 @@ export class FormComponent {
private profileID: string;
constructor(public datasetprofileAdmin: DatasetProfileAdmin, private datasetProfileService: DatasetProfileService, private route: ActivatedRoute,
private router:Router) {
private router: Router) {
this.profileID = route.snapshot.params['id'];
}
@ -83,10 +83,10 @@ export class FormComponent {
onSubmit() {
let data = this.form.value;
if (this.profileID) this.updateForm(this.profileID, data).subscribe(()=>{
this.router.navigate(['/datasetsProfiles'])
if (this.profileID) this.updateForm(this.profileID, data).subscribe(() => {
this.router.navigate(['/datasetsProfiles'])
});
else this.createForm(data).subscribe(()=>{
else this.createForm(data).subscribe(() => {
this.router.navigate(['/datasetsProfiles'])
});
}

View File

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

View File

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

View File

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

View File

@ -11,9 +11,9 @@ import { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable";
import { PageEvent } from '@angular/material';
import { DataManagementPlanService } from "@app/services/data-management-plan/data-management-plan.service";
import { DataManagementPlanModel } from "@app/models/data-managemnt-plans/DataManagementPlanModel";
import { DatasetCriteriaComponent } from '@app/shared/components/criteria/datasets/datasets-criteria.component';
import { DataManagementPlanService } from "../../services/data-management-plan/data-management-plan.service";
import { DataManagementPlanModel } from "../../models/data-managemnt-plans/DataManagementPlanModel";
import { DatasetCriteriaComponent } from '../../shared/components/criteria/datasets/datasets-criteria.component';
@Component({
@ -59,8 +59,8 @@ export class DatasetListingComponent implements OnInit {
this.refresh();
this.criteria.setRefreshCallback(() => this.refresh());
if (this.dmpId != null)
if(params['dmpLabel']!=undefined)
this.titlePrefix ="for " + params['dmpLabel'];
if (params['dmpLabel'] != undefined)
this.titlePrefix = "for " + params['dmpLabel'];
});
}
@ -80,7 +80,7 @@ export class DatasetListingComponent implements OnInit {
return defaultCriteria;
}
makeItPublic(id: String) {
makeItPublic(id: String) {
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 { BaseErrorModel } from "../../models/error/BaseErrorModel";
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 { DataManagementPlanProfileModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileModel";
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 { 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 { DynamicFieldsProjectComponent } from './editor/dynamic-fields-project/dynamic-fields-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 { ProjectCriteria } from "../../models/criteria/project/ProjectCriteria";
import { ProjectService } from "../../services/project/project.service";
import { DmpUsersModel } from "@app/models/dmpUsers/DmpUsersModel";
import { AddResearchersComponent } from "@app/add-researchers/add-researchers.component";
import { DmpUsersModel } from "../../models/dmpUsers/DmpUsersModel";
import { AddResearchersComponent } from "../../add-researchers/add-researchers.component";
import { ViewContainerRef } from '@angular/core';
import { TdDialogService } from '@covalent/core';
import { AvailableProfilesComponent } from "@app/available-profiles/available-profiles.component";
import { AutoCompleteChipConfiguration } from "@app/shared/components/autocompleteChips/AutoCompleteChipConfiguration";
import { BaseCriteria } from "@app/models/criteria/BaseCriteria";
import { AvailableProfilesComponent } from "../../available-profiles/available-profiles.component";
import { AutoCompleteChipConfiguration } from "../../shared/components/autocompleteChips/AutoCompleteChipConfiguration";
import { BaseCriteria } from "../../models/criteria/BaseCriteria";
import { DataManagementPlanProfileService } from "../../services/data-management-plan-profile/datamanagement-profile.service";
import { DataManagementPlanProfileListingModel } from "../../models/data-management-plan-profile/DataManagementPlanProfileListingModel";
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 { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable";
import { DataManagementPlanRoutes } from '@app/dmps/dmps.routes';
import { DatasetRoutes } from '@app/datasets/dataset.routes';
import { ProjectModel } from '@app/models/projects/ProjectModel';
import { DataManagementPlanRoutes } from '../../dmps/dmps.routes';
import { DatasetRoutes } from '../../datasets/dataset.routes';
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 { Observable } from "rxjs/Observable";
import { FormGroup } from '@angular/forms';
import { AutoCompleteChipConfiguration } from "@app/shared/components/autocompleteChips/AutoCompleteChipConfiguration";
import { BaseCriteria } from '@app/models/criteria/BaseCriteria';
import { AutoCompleteChipConfiguration } from "../../../shared/components/autocompleteChips/AutoCompleteChipConfiguration";
import { BaseCriteria } from '../../../models/criteria/BaseCriteria';
@Component({

View File

@ -1,15 +1,3 @@
<div [formGroup]="form">
<mat-form-field>
<input matInput [matAutocomplete]="auto" formControlName="value" [required]="required" [disabled]="disabled">
<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>
<app-auto-complete class="mat-form-field-full-width" placeholder="{{ form.get('data').value.label | translate }}" [inputData]="autoCompleteConfiguration"
titleKey="label" [formCtrl]="form.get('value')" [displayFunction]="displayWith.bind(this)" [assignValueFunction]="assign.bind(this)" >
</app-auto-complete>

View File

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

View File

@ -1,6 +1,6 @@
import { Field } from '../../../models/Field';
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';
@Component({
@ -15,5 +15,4 @@ export class DynamicFieldCheckBoxComponent {
@Input() field: Field;
@Input() form: FormGroup;
}

View File

@ -1,10 +1,6 @@
<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">
<!-- <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 *ngIf="visibilityRulesService.isElementVisible(null,compositeField.id)">
<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;">
<mat-accordion>
<mat-expansion-panel expanded=true>
@ -46,12 +11,6 @@
</mat-panel-description>
</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 *ngIf="isVisible(pathName+'.compositeFields.'+i, compositeField)">
<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)"
[pathName]="pathName+'.compositeFields.'+i+'.multiplicityItems.'+j"></df-composite-field>
</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 *ngIf="compositeField.hasCommentField" [formGroup]="form.get('compositeFields').get(''+i)">
<mat-form-field>
<input matInput formControlName="commentFieldValue" placeholder="comment">
</mat-form-field>
</div>
</div>
<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 { Component, Input, OnInit, ViewEncapsulation } from '@angular/core';
import { CompositeField } from '../../models/CompositeField';
import { Section } from '@app/models/Section';
import { Section } from '../../models/Section';
@Component({
@ -33,9 +33,9 @@ export class DynamicFormSectionComponent implements OnInit {
isVisible(pathname: string, fieldSet: CompositeField): boolean {
if (!this.visibilityRulesService.isElementVisible(pathname, fieldSet.id)) return false;
for (var i = 0; i < fieldSet.fields.length; i++) {
if (!this.visibilityRulesService.isElementVisible(pathname+'.fields.'+i, fieldSet.fields[i].id))
return false;
if (this.visibilityRulesService.isElementVisible(pathname + '.fields.' + i, fieldSet.fields[i].id))
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 { CommonModule } from '@angular/common';
import { NgModule } from "@angular/core";
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service';
import { DatasetProfileService } from '@app/services/dataset-profile.service';
import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service';
import { DatasetProfileService } from '../services/dataset-profile.service';
@NgModule({

View File

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

View File

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

View File

@ -1,23 +1,32 @@
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>{
public type:string;
public url:string;
public type: string;
public url: string;
public optionsRoot: string;
public autoCompleteOptions: ListingItem = new ListingItem();
buildForm():FormGroup{
return this.formBuilder.group({
label:[this.label],
type:[this.type],
url:[this.url]
buildForm(): FormGroup {
let formGroup = this.formBuilder.group({
label: [this.label],
type: [this.type],
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.url = item.url;
this.label = item.label;
this.optionsRoot = item.optionsRoot;
this.autoCompleteOptions = JsonSerializer.fromJSONObject(item.autoCompleteOptions, ListingItem);
return this;
}
}

View File

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

View File

@ -5,7 +5,7 @@ import { FormGenerator } from './interfaces/FormGenerator';
import { JsonSerializer } from '../utilities/JsonSerializer';
import { Section } from './Section';
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>{
public status: number
public pages: Array<Page>;

View File

@ -5,7 +5,7 @@ import { JsonSerializer } from '../utilities/JsonSerializer';
import { Serializable } from './interfaces/Serializable';
import { Multiplicity } from './Multiplicity';
import { DefaultValue } from './DefaultValue';
import { ValidationTypes } from '@app/models/common/ValidationTypes';
import { ValidationTypes } from '../models/common/ValidationTypes';
import { ViewStyle } from './datasetProfileAdmin/ViewStyle';
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 { FormGenerator } from './interfaces/FormGenerator';
import { Serializable } from './interfaces/Serializable';
@ -10,20 +10,20 @@ export class Page extends BaseModel implements Serializable<Page> {
public title: string;
public sections: Array<Section>;
fromJSONObject(item:any):Page{
fromJSONObject(item: any): Page {
this.ordinal = item.ordinal;
this.title = item.title;
this.sections = JsonSerializer.fromJSONArray(item.sections,Section);
this.sections = JsonSerializer.fromJSONArray(item.sections, Section);
return this;
}
buildForm():FormGroup{
let formGroup:FormGroup = new FormBuilder().group({});
buildForm(): FormGroup {
let formGroup: FormGroup = new FormBuilder().group({});
let sectionsFormArray = new Array<FormGroup>();
this.sections.forEach(item => {
let form: FormGroup = item.buildForm();
sectionsFormArray.push(form)
})
})
formGroup.addControl('sections', this.formBuilder.array(sectionsFormArray));
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 {
public name: String

View File

@ -10,7 +10,7 @@ import { ResearcherModel } from "../researcher/ResearcherModel";
import { JsonSerializer } from "../../utilities/JsonSerializer";
import { ProfileModel } from "../profile/ProfileModel";
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 { 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: 'description', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'description')] });
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: 'profiles', validators: [Validators.required, BackendErrorValidator(this.errorModel, 'profiles')] });
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 { FormGroup, FormArray, FormControl } from '@angular/forms';
import { FormGenerator } from '../interfaces/FormGenerator';
import { JsonSerializer } from 'app/utilities/JsonSerializer';
import { JsonSerializer } from '../../utilities/JsonSerializer';
import { Serializable } from '../interfaces/Serializable';
import { Rule } from './Rule';
import { Multiplicity } from './Multiplicity';
import { DefaultValue } from './DefaultValue';
import { ViewStyle } from './ViewStyle';
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>{
@ -64,10 +64,10 @@ export class Field extends BaseModel implements Serializable<Field>, FormGenerat
ordinal: [this.ordinal]
});
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([
new FormControl(valid)
]);
]);
//formGroup.addControl("multiplicity", this.multiplicity.buildForm());
formGroup.addControl("validations", arr);

View File

@ -11,7 +11,7 @@ import { ServiceModel } from "../services/ServiceModel";
import { JsonSerializer } from "../../utilities/JsonSerializer";
import { RegisterModel } from "../registers/RegisterModel";
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> {
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>{

View File

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

View File

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

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 { BaseErrorModel } from "../../models/error/BaseErrorModel";
import { TdDialogService } from "@covalent/core";
import { ProjectFileUploaderService } from "@app/services/files/project-file-uploader.service";
import { HostConfiguration } from "@app/app.constants";
import { ProjectFileUploaderService } from "../../services/files/project-file-uploader.service";
import { HostConfiguration } from "../../app.constants";
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 { DataSource } from "@angular/cdk/table";
import { Observable } from "rxjs/Observable";
import { ProjectCriteriaComponent } from '@app/shared/components/criteria/projects/projects-criteria.component';
import { HostConfiguration } from '@app/app.constants';
import { ProjectCriteriaComponent } from '../../shared/components/criteria/projects/projects-criteria.component';
import { HostConfiguration } from '../../app.constants';
import { LanguageService } from '../../services/language/language.service';
import { LanguageResolverService } from '../../services/language-resolver/language-resolver.service';
@ -130,7 +130,8 @@ export class ProjectDataSource extends DataSource<ProjectListingModel> {
})
return item;
});
});
})
}
disconnect() {

View File

@ -1,10 +1,11 @@
import { Component, Input, OnInit, AfterViewChecked, ViewChild } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { DatasetProfileAdmin } from '@app/services/datasetProfileAdmin/datasetProfileAfmin.service';
import { HostConfiguration } from '@app/app.constants';
import { AutocompleteLookupItem } from '@app/models/autocomplete/AutocompleteLookupItem';
import { DatasetProfileAdmin } from '../services/datasetProfileAdmin/datasetProfileAfmin.service';
import { HostConfiguration } from '../app.constants';
import { Observable } from 'rxjs/Observable';
import { RequestItem } from '../models/criteria/RequestItem';
import { AutocompleteLookupItem } from '../models/auto-complete/AutocompleteLookUpItem';
@Injectable()
export class DatasetProfileService {
@ -40,7 +41,7 @@ export class DatasetProfileService {
// 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)
}

View File

@ -10,7 +10,7 @@ import { Observable } from 'rxjs/Observable';
import { DataManagementPlanModel } from '../../models/data-managemnt-plans/DataManagementPlanModel';
import { DataManagementPlanCriteria } from '../../models/criteria/data-management-plan/DataManagementPlanCriteria';
import { RequestItem } from '../../models/criteria/RequestItem';
import { DatasetProfileModel } from '@app/models/datasetprofile/DatasetProfileModel';
import { DatasetProfileModel } from '../../models/datasetprofile/DatasetProfileModel';
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 { DatasetModel } from '../../models/datasets/DatasetModel';
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 });
}
makeDatasetPublic(id: String){
return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers })
makeDatasetPublic(id: String) {
return this.http.get(this.actionUrl + 'makepublic/' + id, { headers: this.headers })
}
getDatasetProfiles(): Observable<DatasetProfileModel[]>{
return this.http.get<DatasetProfileModel[]>(HostConfiguration.Server +'datasetprofiles/getAll', { headers: this.headers })
getDatasetProfiles(): Observable<DatasetProfileModel[]> {
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 { DatasetProfileModelAdmin } from '../../models/datasetProfileAdmin/DatasetProfileModelAdmin';
import { DatasetListingModel } from '@app/models/datasets/DatasetListingModel';
import { DatasetListingModel } from '../../models/datasets/DatasetListingModel';
@Injectable()
export class DatasetProfileAdmin {
private actionUrl: string;
private headers: HttpHeaders;
private actionUrl: string;
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 = this.headers.set('Content-Type', 'application/json');
this.headers = this.headers.set('Accept', 'application/json');
}
createForm(data) {
return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp', data, { headers: this.headers });
}
this.headers = new HttpHeaders();
this.headers = this.headers.set('Content-Type', 'application/json');
this.headers = this.headers.set('Accept', 'application/json');
}
createForm(data) {
return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp', data, { headers: this.headers });
}
updateForm(id, data) {
return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp/' + id, data, { headers: this.headers })
}
updateForm(id, data) {
return this.http.post<DatasetProfileModelAdmin>(this.actionUrl + 'addDmp/' + id, data, { headers: this.headers })
}
getDatasetProfileById(datasetProfileID){
return this.http.get<DatasetProfileModelAdmin>(this.actionUrl + 'get/' + datasetProfileID, { headers: this.headers })
}
getDatasetProfileById(datasetProfileID) {
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 { Observable } from 'rxjs/Observable';
import { ExternalSourcesItemModel } from '../../models/external-sources/ExternalSourcesItemModel';
import { BaseCriteria } from '@app/models/criteria/BaseCriteria';
import { RequestItem } from '@app/models/criteria/RequestItem';
import { ResearcherCriteria } from '@app/models/criteria/researchers/ResearcherCriteria';
import { BaseCriteria } from '../../models/criteria/BaseCriteria';
import { RequestItem } from '../../models/criteria/RequestItem';
import { ResearcherCriteria } from '../../models/criteria/researchers/ResearcherCriteria';
@Injectable()

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
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";
@Component({
@ -7,7 +7,7 @@ import { FormControl } from "@angular/forms";
templateUrl: './file-uploader.component.html'
})
export class FileUploaderComponent implements OnInit {
files: File | FileList;
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="/datasetsProfiles">{{'NAV-BAR.DATASETS-ADMIN' | translate}}</button>
</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>
<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>{
public label: string;
public url: string;
public all: string;

View File

@ -1,4 +1,4 @@
<div *ngFor="let item of items | limitTo:urlLimit">
<a [href]="item.url">{{item.label}}</a>
<a (click)="navigate(item.url)">{{item.label}}</a>
</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 { UrlListingItem } from "@app/shared/components/url-listing/UrlListingItem";
import { UrlListingItem } from "../../../shared/components/url-listing/UrlListingItem";
import { Router } from "@angular/router";
@Component({
selector: 'app-url-listing',
@ -13,7 +14,14 @@ export class UrlListingComponent {
@Input()
urlLimit: number = 3;
constructor(private router: Router) { }
ngOnInit() {
console.log(this.items.length > this.urlLimit)
}
navigate(link: string) {
this.router.navigateByUrl(link);
}
}

View File

@ -1,13 +1,28 @@
<div [formGroup]="form">
<div formGroupName="data" class="form-row">
<div class="form-group col-md-12" >
<div class="form-group col-md-12">
<label>Label</label>
<input type="string" class="form-control" formControlName="label">
</div>
<div class="form-group col-md-12" >
<div class="form-group col-md-12">
<label>Url</label>
<input type="string" class="form-control" formControlName="url">
</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>

View File

@ -2,19 +2,19 @@
import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'autocomplete-component',
templateUrl: './autocomplete-component.html'
})
export class AutocompleteComponent implements OnInit{
export class AutocompleteComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data:AutocompleteData = new AutocompleteData();
ngOnInit(){
this.data.type= "autocomplete";
private data: AutocompleteData = new AutocompleteData();
ngOnInit() {
this.data.type = "autocomplete";
let autocomplete: AutocompleteData = new AutocompleteData();
//this.dataModel.data = new JsonSerializer<AutocompleteData>().fromJSONObject(this.data,AutocompleteData);
//(<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 { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'booleanDecision-component',
templateUrl: './booleanDecision-component.html'
})
export class BooleanDecisionComponent implements OnInit{
export class BooleanDecisionComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data:BooleanDecisionData = new BooleanDecisionData();
ngOnInit(){
private data: BooleanDecisionData = new BooleanDecisionData();
ngOnInit() {
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 { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'checkbox-component',
templateUrl: './checkbox-component.html'
})
export class CheckBoxComponent implements OnInit{
export class CheckBoxComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data:CheckBoxData = new CheckBoxData();
ngOnInit(){
private data: CheckBoxData = new CheckBoxData();
ngOnInit() {
this.form.addControl("data", this.data.buildForm());
}
}

View File

@ -1,25 +1,25 @@
import { FormGroup } from '@angular/forms';
import { Component, Input, OnInit } from '@angular/core';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'combobox-component',
templateUrl: './combobox-component.html'
})
export class ComboboxComponent implements OnInit{
export class ComboboxComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
type: string;
options = [{id:"autocomplete", value: "autocomplete"}, {id:"wordlist", value: "wordlist"}];
options = [{ id: "autocomplete", value: "autocomplete" }, { id: "wordlist", value: "wordlist" }];
ngOnInit(){
if (this.dataModel.data && this.form.get("data")){
ngOnInit() {
if (this.dataModel.data && this.form.get("data")) {
this.type = this.form.get("data").get("type").value;
}
}
onchangeCombo(){
onchangeCombo() {
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 { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'freetext-component',
templateUrl: './freetext-component.html'
})
export class FreeTextComponent implements OnInit{
export class FreeTextComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data:FreeTextData = new FreeTextData();
ngOnInit(){
private data: FreeTextData = new FreeTextData();
ngOnInit() {
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 { ListingItem } from '../../../models/Common/ListingItem';
import { JsonSerializer } from '../../../utilities/JsonSerializer';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'radiobox-component',
templateUrl: './radiobox-component.html'
})
export class RadioBoxComponent implements OnInit{
export class RadioBoxComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data: RadioBoxData = new RadioBoxData();
private options = new Array<ListingItem>();
ngOnInit(){
ngOnInit() {
//if (this.form.get("data")) this.form.removeControl("data");
if (!this.form.get("data"))
this.form.addControl("data", this.data.buildForm());
if(!this.dataModel.data) this.addNewRow();
this.form.addControl("data", this.data.buildForm());
if (!this.dataModel.data) this.addNewRow();
}
addNewRow(){
let radioListOptions:ListingItem = new ListingItem();
(<FormArray>this.form.get("data").get("options")).push(radioListOptions.buildForm());
this.data.options = [];
this.data.options.push(radioListOptions);
this.dataModel.data = JsonSerializer.fromJSONObject(this.data,RadioBoxData);
addNewRow() {
let radioListOptions: ListingItem = new ListingItem();
(<FormArray>this.form.get("data").get("options")).push(radioListOptions.buildForm());
this.data.options = [];
this.data.options.push(radioListOptions);
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 { Component, Input, OnInit } from '@angular/core';
import { FormArray } from '@angular/forms';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'textarea-component',
templateUrl: './textarea-component.html'
})
export class TextAreaComponent implements OnInit{
export class TextAreaComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data:TextArea = new TextArea();
ngOnInit(){
private data: TextArea = new TextArea();
ngOnInit() {
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 { ListingItem } from '../../../models/Common/ListingItem';
import { JsonSerializer } from '../../../utilities/JsonSerializer';
import { Field } from '@app/models/datasetProfileAdmin/Field';
import { Field } from '../../../models/datasetProfileAdmin/Field';
@Component({
selector: 'wordlist-component',
templateUrl: './wordlist-component.html'
})
export class WordlistComponent implements OnInit{
export class WordlistComponent implements OnInit {
@Input() dataModel: Field;
@Input() form: FormGroup;
private data: WordListData = new WordListData();
private options = new Array<ListingItem>();
ngOnInit(){
ngOnInit() {
this.data.type = "wordlist";
// if (this.form.get("data")) this.form.removeControl("data");
this.form.addControl("data", this.data.buildForm());
if(!this.dataModel.data)
// if (this.form.get("data")) this.form.removeControl("data");
this.form.addControl("data", this.data.buildForm());
if (!this.dataModel.data)
this.addNewRow();
}
addNewRow(){
let wordListOptions:ListingItem = new ListingItem();
(<FormArray>this.form.get("data").get("options")).push(wordListOptions.buildForm());
this.data.options = [];
this.data.options.push(wordListOptions);
this.dataModel.data = JsonSerializer.fromJSONObject(this.data,WordListData);
addNewRow() {
let wordListOptions: ListingItem = new ListingItem();
(<FormArray>this.form.get("data").get("options")).push(wordListOptions.buildForm());
this.data.options = [];
this.data.options.push(wordListOptions);
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 { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DataManagementPlanCriteriaComponent } from './components/criteria/data-management-plan/dmp-criteria.component';
import { AutocompleteChipComponent } from '@app/shared/components/autocompleteChips/autocompleteChips.component';
import { FileUploaderComponent } from '@app/shared/components/file-uploader/file-uploader.component';
import { UrlListingComponent } from '@app/shared/components/url-listing/url-listing.component';
import { NgForLimitPipe } from '@app/shared/pipes/ngforlimit/NgForLimit.pipe';
import { AutocompleteChipComponent } from '../shared/components/autocompleteChips/autocompleteChips.component';
import { FileUploaderComponent } from '../shared/components/file-uploader/file-uploader.component';
import { UrlListingComponent } from '../shared/components/url-listing/url-listing.component';
import { NgForLimitPipe } from '../shared/pipes/ngforlimit/NgForLimit.pipe';
import { DataManagementPlanProfileCriteriaComponent } from './components/criteria/datamanagementplanprofile/dmp-profile-criteria.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 { ModuleWithProviders, NgModule } from "@angular/core";
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({
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 { LoginComponent } from './login/login.component';
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 = [
{ path: 'login', component: LoginComponent },

View File

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

View File

@ -11,7 +11,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { UsersComponent } from './components/users.component';
import { UsersRoutes } from './users.routes';
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({
imports: [
@ -26,8 +26,7 @@ import { RecentActivityComponent } from '@app/users/activity/recent-activity.com
}
}),
ReactiveFormsModule,
MaterialModule,
RecentActivityComponent
MaterialModule
],
declarations: [
@ -38,7 +37,9 @@ import { RecentActivityComponent } from '@app/users/activity/recent-activity.com
],
exports: [
UsersComponent
UsersComponent,
RecentActivityComponent
]
})

View File

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

View File

@ -3,5 +3,7 @@ export enum ApiMessageCode {
SUCCESS_MESSAGE = 200,
WARN_MESSAGE = 300,
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) {
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)) {
return true
} else {
@ -29,7 +31,6 @@ export class VisibilityRulesService {
public buildVisibilityRules(item: Array<Rule>) {
this.visibilityRuleContext = new VisibilityRulesContext();
this.visibilityRuleContext.buildVisibilityRuleContext(item);
this.visibilityRuleContext.rules.forEach(item => this.evaluateVisibility(item))
}
public updateValueAndVisibility(id: string) {
@ -40,12 +41,20 @@ export class VisibilityRulesService {
private evaluateVisibility(visibilityRule: VisibilityRule) {
for (let i = 0; i < visibilityRule.sourceVisibilityRules.length; i++) {
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)) {
this.elementVisibilityMap.set(visibilityRule.targetControlId, false)
return;
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)) {
if (this.formGroup.get(pathKey).parent.get("id")) {
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 {

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