no message
This commit is contained in:
parent
1715e8629f
commit
52bceed971
|
@ -185,6 +185,19 @@
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
<version>3.5</version>
|
<version>3.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi-ooxml</artifactId>
|
||||||
|
<version>3.17</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.poi</groupId>
|
||||||
|
<artifactId>poi</artifactId>
|
||||||
|
<version>3.17</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -247,6 +260,12 @@
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
<activation>
|
||||||
|
<property>
|
||||||
|
<name>profile</name>
|
||||||
|
<value>production</value>
|
||||||
|
</property>
|
||||||
|
</activation>
|
||||||
</profile>
|
</profile>
|
||||||
</profiles>
|
</profiles>
|
||||||
</project>
|
</project>
|
|
@ -13,11 +13,17 @@ import eu.eudat.models.security.Principal;
|
||||||
import eu.eudat.services.ApiContext;
|
import eu.eudat.services.ApiContext;
|
||||||
import eu.eudat.types.ApiMessageCode;
|
import eu.eudat.types.ApiMessageCode;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.core.io.InputStreamResource;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,4 +87,22 @@ public class DatasetWizardController extends BaseController {
|
||||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<eu.eudat.entities.Dataset>().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage()));
|
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<eu.eudat.entities.Dataset>().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequestMapping(method = RequestMethod.GET, value = {"/getWordDocument/{id}"}, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
|
||||||
|
public @ResponseBody
|
||||||
|
ResponseEntity<InputStreamResource> getWordDocument(@PathVariable String id) {
|
||||||
|
try {
|
||||||
|
File file = new DatasetManager().getWordDocument(this.getApiContext().getDatabaseRepository().getDatasetDao(), id);
|
||||||
|
InputStreamResource resource = new InputStreamResource(new FileInputStream(file));
|
||||||
|
|
||||||
|
return ResponseEntity.ok()
|
||||||
|
.header(HttpHeaders.CONTENT_DISPOSITION,
|
||||||
|
"attachment;filename=" + file.getName())
|
||||||
|
.contentType(MediaType.APPLICATION_PDF).contentLength(file.length())
|
||||||
|
.body(resource);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
return new ResponseEntity<InputStreamResource>(HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package eu.eudat.documents.types;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ikalyvas on 2/26/2018.
|
||||||
|
*/
|
||||||
|
public enum ParagraphStyle {
|
||||||
|
TEXT(0), HEADER1(1), HEADER2(2), HEADER3(3), HEADER4(4), TITLE(5), FOOTER(6), COMMENT(7);
|
||||||
|
|
||||||
|
private Integer value;
|
||||||
|
|
||||||
|
private ParagraphStyle(Integer value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ParagraphStyle fromInteger(Integer value) {
|
||||||
|
switch (value) {
|
||||||
|
case 0:
|
||||||
|
return TEXT;
|
||||||
|
case 1:
|
||||||
|
return HEADER1;
|
||||||
|
case 2:
|
||||||
|
return HEADER2;
|
||||||
|
case 3:
|
||||||
|
return HEADER3;
|
||||||
|
case 4:
|
||||||
|
return HEADER4;
|
||||||
|
case 5:
|
||||||
|
return TITLE;
|
||||||
|
case 6:
|
||||||
|
return FOOTER;
|
||||||
|
case 7:
|
||||||
|
return COMMENT;
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unsupported ParagraphStyle Code");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package eu.eudat.documents.types;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ikalyvas on 2/27/2018.
|
||||||
|
*/
|
||||||
|
public enum TextStyle {
|
||||||
|
ITALIC(0), BOLD(1), CAPS(2);
|
||||||
|
|
||||||
|
private Integer value;
|
||||||
|
|
||||||
|
private TextStyle(Integer value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TextStyle fromInteger(Integer value) {
|
||||||
|
switch (value) {
|
||||||
|
case 0:
|
||||||
|
return ITALIC;
|
||||||
|
case 1:
|
||||||
|
return BOLD;
|
||||||
|
case 2:
|
||||||
|
return CAPS;
|
||||||
|
default:
|
||||||
|
throw new RuntimeException("Unsupported TextStyle Code");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,193 @@
|
||||||
|
package eu.eudat.documents.word;
|
||||||
|
|
||||||
|
import eu.eudat.documents.types.ParagraphStyle;
|
||||||
|
import eu.eudat.documents.types.TextStyle;
|
||||||
|
import eu.eudat.models.user.components.datasetprofile.Field;
|
||||||
|
import eu.eudat.models.user.components.datasetprofile.FieldSet;
|
||||||
|
import eu.eudat.models.user.components.datasetprofile.Section;
|
||||||
|
import eu.eudat.models.user.composite.DatasetProfilePage;
|
||||||
|
import eu.eudat.models.user.composite.PagedDatasetProfile;
|
||||||
|
import eu.eudat.utilities.interfaces.Applier;
|
||||||
|
import org.apache.poi.xwpf.usermodel.*;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl;
|
||||||
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ikalyvas on 2/26/2018.
|
||||||
|
*/
|
||||||
|
public class WordBuilder {
|
||||||
|
|
||||||
|
private Map<ParagraphStyle, Applier<XWPFDocument, String, XWPFParagraph>> options = new HashMap<>();
|
||||||
|
private CTAbstractNum cTAbstractNum;
|
||||||
|
private BigInteger numId;
|
||||||
|
|
||||||
|
public WordBuilder() {
|
||||||
|
this.cTAbstractNum = CTAbstractNum.Factory.newInstance();
|
||||||
|
this.cTAbstractNum.setAbstractNumId(BigInteger.valueOf(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void buildOptions() {
|
||||||
|
this.options.put(ParagraphStyle.TEXT, (mainDocumentPart, item) -> {
|
||||||
|
XWPFParagraph paragraph = mainDocumentPart.createParagraph();
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(item);
|
||||||
|
run.setFontSize(11);
|
||||||
|
return paragraph;
|
||||||
|
});
|
||||||
|
this.options.put(ParagraphStyle.TITLE, (mainDocumentPart, item) -> {
|
||||||
|
XWPFParagraph paragraph = mainDocumentPart.createParagraph();
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(item);
|
||||||
|
run.setBold(true);
|
||||||
|
run.setFontSize(14);
|
||||||
|
return paragraph;
|
||||||
|
});
|
||||||
|
this.options.put(ParagraphStyle.HEADER1, (mainDocumentPart, item) -> {
|
||||||
|
XWPFParagraph paragraph = mainDocumentPart.createParagraph();
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(item);
|
||||||
|
run.setBold(true);
|
||||||
|
run.setFontSize(12);
|
||||||
|
run.setUnderline(UnderlinePatterns.SINGLE);
|
||||||
|
return paragraph;
|
||||||
|
});
|
||||||
|
this.options.put(ParagraphStyle.HEADER2, (mainDocumentPart, item) -> {
|
||||||
|
XWPFParagraph paragraph = mainDocumentPart.createParagraph();
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(item);
|
||||||
|
run.setBold(true);
|
||||||
|
run.setFontSize(12);
|
||||||
|
run.setUnderline(UnderlinePatterns.SINGLE);
|
||||||
|
return paragraph;
|
||||||
|
});
|
||||||
|
this.options.put(ParagraphStyle.HEADER3, (mainDocumentPart, item) -> {
|
||||||
|
XWPFParagraph paragraph = mainDocumentPart.createParagraph();
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(item);
|
||||||
|
run.setBold(true);
|
||||||
|
run.setFontSize(11);
|
||||||
|
run.setUnderline(UnderlinePatterns.SINGLE);
|
||||||
|
return paragraph;
|
||||||
|
});
|
||||||
|
this.options.put(ParagraphStyle.FOOTER, (mainDocumentPart, item) -> {
|
||||||
|
XWPFParagraph paragraph = mainDocumentPart.createParagraph();
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(item);
|
||||||
|
return paragraph;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public File build(PagedDatasetProfile pagedDatasetProfile) throws IOException {
|
||||||
|
XWPFDocument document = new XWPFDocument();
|
||||||
|
|
||||||
|
this.buildOptions();
|
||||||
|
createPages(pagedDatasetProfile.getPages(), document, true);
|
||||||
|
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
|
||||||
|
XWPFNumbering numbering = document.createNumbering();
|
||||||
|
BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
|
||||||
|
this.numId = numbering.addNum(abstractNumID);
|
||||||
|
createPages(pagedDatasetProfile.getPages(), document, false);
|
||||||
|
File exportFile = new File("welcome.docx");
|
||||||
|
FileOutputStream out = new FileOutputStream(exportFile);
|
||||||
|
document.write(out);
|
||||||
|
out.close();
|
||||||
|
return exportFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createPages(List<DatasetProfilePage> datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing) {
|
||||||
|
//if (createListing) this.addListing(mainDocumentPart, 0, false, true);
|
||||||
|
datasetProfilePages.forEach(item -> {
|
||||||
|
createSections(item.getSections(), mainDocumentPart, ParagraphStyle.TITLE, 0, createListing);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createSections(List<Section> sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing) {
|
||||||
|
if (createListing) this.addListing(mainDocumentPart, indent, false, true);
|
||||||
|
BigInteger listing = numId;
|
||||||
|
sections.forEach(section -> {
|
||||||
|
if (!createListing) {
|
||||||
|
XWPFParagraph paragraph = addParagraphContent(section.getTitle(), mainDocumentPart, style, listing);
|
||||||
|
CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl();
|
||||||
|
number.setVal(BigInteger.valueOf(indent));
|
||||||
|
}
|
||||||
|
createSections(section.getSections(), mainDocumentPart, ParagraphStyle.HEADER2, 1, createListing);
|
||||||
|
createCompositeFields(section.getCompositeFields(), mainDocumentPart, 2, createListing);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createCompositeFields(List<FieldSet> compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing) {
|
||||||
|
if (createListing) this.addListing(mainDocumentPart, indent, true, true);
|
||||||
|
compositeFields.forEach(compositeField -> {
|
||||||
|
if (compositeField.getTitle() != null && !compositeField.getTitle().isEmpty() && !createListing) {
|
||||||
|
XWPFParagraph paragraph = addParagraphContent(compositeField.getTitle(), mainDocumentPart, ParagraphStyle.HEADER3, numId);
|
||||||
|
CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl();
|
||||||
|
number.setVal(BigInteger.valueOf(indent));
|
||||||
|
}
|
||||||
|
createFields(compositeField.getFields(), mainDocumentPart, 3, createListing);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createFields(List<Field> fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing) {
|
||||||
|
if (createListing) this.addListing(mainDocumentPart, indent, false, false);
|
||||||
|
fields.forEach(field -> {
|
||||||
|
if (!createListing) {
|
||||||
|
XWPFParagraph paragraph = addParagraphContent(field.getValue(), mainDocumentPart, ParagraphStyle.TEXT, numId);
|
||||||
|
CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl();
|
||||||
|
number.setVal(BigInteger.valueOf(indent));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public XWPFParagraph addParagraphContent(String text, XWPFDocument mainDocumentPart, ParagraphStyle style, BigInteger numId) {
|
||||||
|
XWPFParagraph paragraph = this.options.get(style).apply(mainDocumentPart, text);
|
||||||
|
if (numId != null) paragraph.setNumID(numId);
|
||||||
|
return paragraph;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void addStyling(List<TextStyle> styles, String color) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addListing(XWPFDocument document, int indent, Boolean question, Boolean hasIndication) {
|
||||||
|
|
||||||
|
//this.cTAbstractNum.setAbstractNumId(BigInteger.valueOf(indent));
|
||||||
|
CTLvl cTLvl = this.cTAbstractNum.addNewLvl();
|
||||||
|
|
||||||
|
String textLevel = "";
|
||||||
|
for (int i = 0; i <= indent; i++) {
|
||||||
|
textLevel += "%" + (i + 1) + ".";
|
||||||
|
}
|
||||||
|
if (question) {
|
||||||
|
cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);
|
||||||
|
cTLvl.addNewLvlText().setVal("Q " + textLevel);
|
||||||
|
cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
|
||||||
|
} else if (!question && hasIndication) {
|
||||||
|
cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);
|
||||||
|
cTLvl.addNewLvlText().setVal(textLevel);
|
||||||
|
cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
|
||||||
|
}
|
||||||
|
if (!question && !hasIndication) {
|
||||||
|
cTLvl.addNewNumFmt().setVal(STNumberFormat.NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if (this.numId == null) {
|
||||||
|
XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
|
||||||
|
XWPFNumbering numbering = document.createNumbering();
|
||||||
|
BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);
|
||||||
|
this.numId = numbering.addNum(abstractNumID);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
||||||
|
|
||||||
import eu.eudat.utilities.DatabaseDefinition;
|
import eu.eudat.utilities.interfaces.DatabaseDefinition;
|
||||||
|
|
||||||
public interface DatabaseViewStyleDefinition extends DatabaseDefinition {
|
public interface DatabaseViewStyleDefinition extends DatabaseDefinition {
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import eu.eudat.models.components.commons.DefaultValue;
|
||||||
import eu.eudat.models.components.commons.ViewStyle;
|
import eu.eudat.models.components.commons.ViewStyle;
|
||||||
import eu.eudat.models.components.commons.Visibility;
|
import eu.eudat.models.components.commons.Visibility;
|
||||||
import eu.eudat.models.components.commons.datafield.FieldData;
|
import eu.eudat.models.components.commons.datafield.FieldData;
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
import eu.eudat.utilities.builders.XmlBuilder;
|
import eu.eudat.utilities.builders.XmlBuilder;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
||||||
|
|
||||||
import eu.eudat.models.components.commons.Multiplicity;
|
import eu.eudat.models.components.commons.Multiplicity;
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import eu.eudat.utilities.builders.XmlBuilder;
|
import eu.eudat.utilities.builders.XmlBuilder;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import eu.eudat.utilities.builders.XmlBuilder;
|
import eu.eudat.utilities.builders.XmlBuilder;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
package eu.eudat.entities.xmlmodels.datasetprofiledefinition;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import eu.eudat.utilities.builders.XmlBuilder;
|
import eu.eudat.utilities.builders.XmlBuilder;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.entities.xmlmodels.modeldefinition;
|
package eu.eudat.entities.xmlmodels.modeldefinition;
|
||||||
|
|
||||||
import eu.eudat.utilities.DatabaseDefinition;
|
import eu.eudat.utilities.interfaces.DatabaseDefinition;
|
||||||
|
|
||||||
public interface DatabaseModelDefinition extends DatabaseDefinition {
|
public interface DatabaseModelDefinition extends DatabaseDefinition {
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package eu.eudat.managers;
|
||||||
|
|
||||||
import eu.eudat.builders.entity.UserInfoBuilder;
|
import eu.eudat.builders.entity.UserInfoBuilder;
|
||||||
import eu.eudat.dao.entities.*;
|
import eu.eudat.dao.entities.*;
|
||||||
|
import eu.eudat.documents.word.WordBuilder;
|
||||||
import eu.eudat.entities.UserInfo;
|
import eu.eudat.entities.UserInfo;
|
||||||
import eu.eudat.models.HintedModelFactory;
|
import eu.eudat.models.HintedModelFactory;
|
||||||
import eu.eudat.models.criteria.DataRepositoryCriteria;
|
import eu.eudat.models.criteria.DataRepositoryCriteria;
|
||||||
|
@ -18,6 +19,9 @@ import eu.eudat.queryable.QueryableList;
|
||||||
import eu.eudat.services.ApiContext;
|
import eu.eudat.services.ApiContext;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXBException;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -50,6 +54,12 @@ public class DatasetManager {
|
||||||
public DatasetWizardModel getSingle(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException {
|
public DatasetWizardModel getSingle(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException {
|
||||||
DatasetWizardModel dataset = new DatasetWizardModel();
|
DatasetWizardModel dataset = new DatasetWizardModel();
|
||||||
eu.eudat.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class));
|
eu.eudat.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class));
|
||||||
|
dataset.setDatasetProfileDefinition(getPagedProfile(dataset, datasetEntity));
|
||||||
|
dataset.fromDataModel(datasetEntity);
|
||||||
|
return dataset;
|
||||||
|
}
|
||||||
|
|
||||||
|
private PagedDatasetProfile getPagedProfile(DatasetWizardModel dataset, eu.eudat.entities.Dataset datasetEntity) {
|
||||||
eu.eudat.models.user.composite.DatasetProfile datasetprofile = UserManager.generateDatasetProfileModel(datasetEntity.getProfile());
|
eu.eudat.models.user.composite.DatasetProfile datasetprofile = UserManager.generateDatasetProfileModel(datasetEntity.getProfile());
|
||||||
datasetprofile.setStatus(dataset.getStatus());
|
datasetprofile.setStatus(dataset.getStatus());
|
||||||
if (datasetEntity.getProperties() != null) {
|
if (datasetEntity.getProperties() != null) {
|
||||||
|
@ -59,9 +69,15 @@ public class DatasetManager {
|
||||||
}
|
}
|
||||||
PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
|
PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
|
||||||
pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile);
|
pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile);
|
||||||
dataset.setDatasetProfileDefinition(pagedDatasetProfile);
|
return pagedDatasetProfile;
|
||||||
dataset.fromDataModel(datasetEntity);
|
}
|
||||||
return dataset;
|
|
||||||
|
public File getWordDocument(DatasetDao datatasetRepository, String id) throws InstantiationException, IllegalAccessException, IOException {
|
||||||
|
WordBuilder wordBuilder = new WordBuilder();
|
||||||
|
DatasetWizardModel dataset = new DatasetWizardModel();
|
||||||
|
eu.eudat.entities.Dataset datasetEntity = datatasetRepository.find(UUID.fromString(id), HintedModelFactory.getHint(DatasetWizardModel.class));
|
||||||
|
PagedDatasetProfile pagedDatasetProfile = getPagedProfile(dataset,datasetEntity);
|
||||||
|
return wordBuilder.build(pagedDatasetProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static eu.eudat.entities.Dataset createOrUpdate(ApiContext apiContext, DatasetWizardModel profile, Principal principal) throws Exception {
|
public static eu.eudat.entities.Dataset createOrUpdate(ApiContext apiContext, DatasetWizardModel profile, Principal principal) throws Exception {
|
||||||
|
|
|
@ -3,7 +3,7 @@ package eu.eudat.models.admin.components.datasetprofile;
|
||||||
import eu.eudat.models.components.commons.DefaultValue;
|
import eu.eudat.models.components.commons.DefaultValue;
|
||||||
import eu.eudat.models.components.commons.ViewStyle;
|
import eu.eudat.models.components.commons.ViewStyle;
|
||||||
import eu.eudat.models.components.commons.Visibility;
|
import eu.eudat.models.components.commons.Visibility;
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package eu.eudat.models.admin.components.datasetprofile;
|
package eu.eudat.models.admin.components.datasetprofile;
|
||||||
|
|
||||||
import eu.eudat.models.components.commons.Multiplicity;
|
import eu.eudat.models.components.commons.Multiplicity;
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.admin.components.datasetprofile;
|
package eu.eudat.models.admin.components.datasetprofile;
|
||||||
|
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
|
|
||||||
|
|
||||||
public class Page implements Comparable, ViewStyleDefinition<eu.eudat.entities.xmlmodels.datasetprofiledefinition.Page> {
|
public class Page implements Comparable, ViewStyleDefinition<eu.eudat.entities.xmlmodels.datasetprofiledefinition.Page> {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.admin.components.datasetprofile;
|
package eu.eudat.models.admin.components.datasetprofile;
|
||||||
|
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
import org.apache.commons.lang3.RandomStringUtils;
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package eu.eudat.models.components.commons;
|
package eu.eudat.models.components.commons;
|
||||||
|
|
||||||
import eu.eudat.entities.xmlmodels.modeldefinition.DatabaseModelDefinition;
|
import eu.eudat.entities.xmlmodels.modeldefinition.DatabaseModelDefinition;
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.components.commons;
|
package eu.eudat.models.components.commons;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.components.commons.datafield;
|
package eu.eudat.models.components.commons.datafield;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.components.commons.datafield;
|
package eu.eudat.models.components.commons.datafield;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.components.commons.datafield;
|
package eu.eudat.models.components.commons.datafield;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package eu.eudat.models.dmp;
|
package eu.eudat.models.dmp;
|
||||||
|
|
||||||
import eu.eudat.utilities.XmlSerializable;
|
import eu.eudat.utilities.interfaces.XmlSerializable;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ import eu.eudat.models.components.commons.ViewStyle;
|
||||||
import eu.eudat.models.components.commons.Visibility;
|
import eu.eudat.models.components.commons.Visibility;
|
||||||
import eu.eudat.models.properties.PropertiesGenerator;
|
import eu.eudat.models.properties.PropertiesGenerator;
|
||||||
import eu.eudat.models.user.composite.PropertiesModelBuilder;
|
import eu.eudat.models.user.composite.PropertiesModelBuilder;
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
|
@ -3,7 +3,7 @@ package eu.eudat.models.user.components.datasetprofile;
|
||||||
import eu.eudat.models.components.commons.Multiplicity;
|
import eu.eudat.models.components.commons.Multiplicity;
|
||||||
import eu.eudat.models.properties.PropertiesGenerator;
|
import eu.eudat.models.properties.PropertiesGenerator;
|
||||||
import eu.eudat.models.user.composite.PropertiesModelBuilder;
|
import eu.eudat.models.user.composite.PropertiesModelBuilder;
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
@ -2,7 +2,7 @@ package eu.eudat.models.user.components.datasetprofile;
|
||||||
|
|
||||||
import eu.eudat.models.properties.PropertiesGenerator;
|
import eu.eudat.models.properties.PropertiesGenerator;
|
||||||
import eu.eudat.models.user.composite.PropertiesModelBuilder;
|
import eu.eudat.models.user.composite.PropertiesModelBuilder;
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import eu.eudat.utilities.builders.ModelBuilder;
|
import eu.eudat.utilities.builders.ModelBuilder;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
|
@ -3,8 +3,8 @@ package eu.eudat.utilities.builders;
|
||||||
import eu.eudat.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition;
|
import eu.eudat.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition;
|
||||||
import eu.eudat.entities.xmlmodels.modeldefinition.DatabaseModelDefinition;
|
import eu.eudat.entities.xmlmodels.modeldefinition.DatabaseModelDefinition;
|
||||||
import eu.eudat.models.components.commons.datafield.*;
|
import eu.eudat.models.components.commons.datafield.*;
|
||||||
import eu.eudat.utilities.ModelDefinition;
|
import eu.eudat.utilities.interfaces.ModelDefinition;
|
||||||
import eu.eudat.utilities.ViewStyleDefinition;
|
import eu.eudat.utilities.interfaces.ViewStyleDefinition;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by ikalyvas on 2/27/2018.
|
||||||
|
*/
|
||||||
|
public interface Applier<A, V, R> {
|
||||||
|
R apply(A applier, V value);
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.eudat.utilities;
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by ikalyvas on 2/5/2018.
|
* Created by ikalyvas on 2/5/2018.
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.eudat.utilities;
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
|
|
||||||
public interface DatabaseDefinition {
|
public interface DatabaseDefinition {
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.eudat.utilities;
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
import eu.eudat.entities.xmlmodels.modeldefinition.DatabaseModelDefinition;
|
import eu.eudat.entities.xmlmodels.modeldefinition.DatabaseModelDefinition;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.eudat.utilities;
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
|
|
||||||
import eu.eudat.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition;
|
import eu.eudat.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition;
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.eudat.utilities;
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
|
|
||||||
import eu.eudat.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition;
|
import eu.eudat.entities.xmlmodels.datasetprofiledefinition.DatabaseViewStyleDefinition;
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.eudat.utilities;
|
package eu.eudat.utilities.interfaces;
|
||||||
|
|
||||||
|
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
|
@ -51,8 +51,8 @@ autouser.root.email=root@dmp.com
|
||||||
autouser.root.password=root
|
autouser.root.password=root
|
||||||
autouser.root.username=root
|
autouser.root.username=root
|
||||||
#################################################################################
|
#################################################################################
|
||||||
b2access.externallogin.user_info_url = https://unity.eudat-aai.fz-juelich.de:443/oauth2/userinfo
|
b2access.externallogin.user_info_url = https://b2access-integration.fz-juelich.de:443/oauth2/userinfo
|
||||||
b2access.externallogin.access_token_url = https://unity.eudat-aai.fz-juelich.de:443/oauth2/token
|
b2access.externallogin.access_token_url = https://b2access-integration.fz-juelich.de:443/oauth2/token
|
||||||
b2access.externallogin.redirect_uri = http://dmp.eudat.org:4200/api/oauth/authorized/b2access
|
b2access.externallogin.redirect_uri = http://dmp.eudat.org:4200/api/oauth/authorized/b2access
|
||||||
b2access.externallogin.clientid = eudatdmptool
|
b2access.externallogin.clientid = eudatdmptool
|
||||||
b2access.externallogin.clientSecret = A3b*1*92
|
b2access.externallogin.clientSecret = A3b*1*92
|
|
@ -71,9 +71,9 @@ import { B2AccessLoginComponent } from './user-management/login/b2access/b2acces
|
||||||
b2accessConfiguration: {
|
b2accessConfiguration: {
|
||||||
clientId: "eudatdmptool",
|
clientId: "eudatdmptool",
|
||||||
clientSecret: "A3b*1*92",
|
clientSecret: "A3b*1*92",
|
||||||
oauthUrl: "https://unity.eudat-aai.fz-juelich.de/oauth2-as/oauth2-authz",
|
oauthUrl: "https://b2access-integration.fz-juelich.de:443/oauth2-as/oauth2-authz",
|
||||||
redirectUri: "http://dmp.eudat.org:4200/api/oauth/authorized/b2access",
|
redirectUri: "http://dmp.eudat.org:4200/api/oauth/authorized/b2access",
|
||||||
accessTokenUri: "https://unity.eudat-aai.fz-juelich.de:443/oauth2/token"
|
accessTokenUri: "https://b2access-integration.fz-juelich.de:443/oauth2/token"
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
HttpModule,
|
HttpModule,
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
title={{dashboardStatisticsData.totalProjectCount}}
|
title={{dashboardStatisticsData.totalProjectCount}}
|
||||||
headerIcon="list"
|
headerIcon="list"
|
||||||
category="Projects"
|
category="Projects"
|
||||||
|
[hasFootContent]="this.isAuthenticated()"
|
||||||
footContent="Open Projects"
|
footContent="Open Projects"
|
||||||
routelLink= '/projects'
|
routelLink= '/projects'
|
||||||
footerIcon="open_in_new"
|
footerIcon="open_in_new"
|
||||||
|
@ -19,6 +20,7 @@
|
||||||
title={{dashboardStatisticsData.totalDataManagementPlanCount}}
|
title={{dashboardStatisticsData.totalDataManagementPlanCount}}
|
||||||
headerIcon="mode_edit"
|
headerIcon="mode_edit"
|
||||||
category="DMPs"
|
category="DMPs"
|
||||||
|
[hasFootContent]="this.isAuthenticated()"
|
||||||
footContent="Open DMPs"
|
footContent="Open DMPs"
|
||||||
routelLink= '/dmps'
|
routelLink= '/dmps'
|
||||||
footerIcon="open_in_new"
|
footerIcon="open_in_new"
|
||||||
|
@ -31,6 +33,7 @@
|
||||||
title={{dashboardStatisticsData.totalDataSetCount}}
|
title={{dashboardStatisticsData.totalDataSetCount}}
|
||||||
headerIcon="subject"
|
headerIcon="subject"
|
||||||
category="Datasets"
|
category="Datasets"
|
||||||
|
[hasFootContent]="this.isAuthenticated()"
|
||||||
footContent="Open Datasets"
|
footContent="Open Datasets"
|
||||||
routelLink= '/datasets'
|
routelLink= '/datasets'
|
||||||
footerIcon="open_in_new"
|
footerIcon="open_in_new"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Component, OnInit } from '@angular/core';
|
import { Component, OnInit, Input } from '@angular/core';
|
||||||
import { Router, ActivatedRoute } from '@angular/router';
|
import { Router, ActivatedRoute } from '@angular/router';
|
||||||
import { DashboardService } from '../../app/services/dashboard/dashboard.service';
|
import { DashboardService } from '../../app/services/dashboard/dashboard.service';
|
||||||
import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel';
|
import { DashboardStatisticsModel } from '../models/dashboard/DashboardStatisticsModel';
|
||||||
|
@ -30,22 +30,22 @@ export class HomepageComponent implements OnInit {
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
|
||||||
if(!this.isAuthenticated()){
|
if (!this.isAuthenticated()) {
|
||||||
this.dashBoardService.getStatistics().subscribe(results => {
|
this.dashBoardService.getStatistics().subscribe(results => {
|
||||||
//let data = results['payload'];
|
//let data = results['payload'];
|
||||||
this.dashboardStatisticsData = JsonSerializer.fromJSONObject(results, DashboardStatisticsModel);
|
this.dashboardStatisticsData = JsonSerializer.fromJSONObject(results, DashboardStatisticsModel);
|
||||||
})
|
})
|
||||||
}else{
|
} else {
|
||||||
this.dashBoardService.getStatisticsSpecificuser().subscribe(results => {
|
this.dashBoardService.getStatisticsSpecificuser().subscribe(results => {
|
||||||
this.dashboardStatisticsData = JsonSerializer.fromJSONObject(results, DashboardStatisticsModel);
|
this.dashboardStatisticsData = JsonSerializer.fromJSONObject(results, DashboardStatisticsModel);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public isAuthenticated(): boolean {
|
public isAuthenticated(): boolean {
|
||||||
return !(!this.authentication.current())
|
return !(!this.authentication.current())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,7 +6,7 @@
|
||||||
<p class="category">{{ category }}</p>
|
<p class="category">{{ category }}</p>
|
||||||
<h3 class="title">{{ title }}</h3>
|
<h3 class="title">{{ title }}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer">
|
<div *ngIf="hasFootContent" class="card-footer">
|
||||||
<a style="cursor:pointer;" (click)= "navigateToUrl()"><i class="material-icons text-danger">{{ footerIcon }}</i> {{ footContent }}</a>
|
<a style="cursor:pointer;" (click)= "navigateToUrl()"><i class="material-icons text-danger">{{ footerIcon }}</i> {{ footContent }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,6 +15,7 @@ export class FigurecardComponent implements OnInit {
|
||||||
@Input() linearColor: string;
|
@Input() linearColor: string;
|
||||||
@Input() boxShadow: string;
|
@Input() boxShadow: string;
|
||||||
@Input() routelLink: string;
|
@Input() routelLink: string;
|
||||||
|
@Input() hasFootContent = true;
|
||||||
|
|
||||||
constructor(private router:Router) { }
|
constructor(private router:Router) { }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue