Skip to content

Commit

Permalink
feat(core): Add a links section to project type. Resolves #884
Browse files Browse the repository at this point in the history
  • Loading branch information
aalmiray committed Aug 10, 2022
1 parent 666634c commit f926530
Show file tree
Hide file tree
Showing 4 changed files with 240 additions and 3 deletions.
135 changes: 135 additions & 0 deletions core/jreleaser-model/src/main/java/org/jreleaser/model/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public class Project extends AbstractModelObject<Project> implements Domain, Ext
private final List<String> authors = new ArrayList<>();
private final List<String> tags = new ArrayList<>();
private final Map<String, Object> extraProperties = new LinkedHashMap<>();
private final Links links = new Links();
private final Java java = new Java();
private final Snapshot snapshot = new Snapshot();
private String name;
Expand All @@ -77,6 +78,7 @@ public class Project extends AbstractModelObject<Project> implements Domain, Ext
@Override
public void freeze() {
super.freeze();
links.freeze();
java.freeze();
snapshot.freeze();
versionPattern.freeze();
Expand All @@ -102,6 +104,7 @@ public void merge(Project project) {
setAuthors(merge(this.authors, project.authors));
setTags(merge(this.tags, project.tags));
setExtraProperties(merge(this.extraProperties, project.extraProperties));
setLinks(project.links);
}

@Override
Expand Down Expand Up @@ -308,6 +311,14 @@ public void setTags(List<String> tags) {
this.tags.addAll(tags);
}

public Links getLinks() {
return links;
}

public void setLinks(Links links) {
this.links.merge(links);
}

@Override
public Map<String, Object> asMap(boolean full) {
Map<String, Object> map = new LinkedHashMap<>();
Expand All @@ -326,6 +337,7 @@ public Map<String, Object> asMap(boolean full) {
map.put("authors", authors);
map.put("tags", tags);
map.put("stereotype", stereotype);
map.put("links", links.asMap(full));
map.put("extraProperties", getResolvedExtraProperties());
if (java.isEnabled()) {
map.put("java", java.asMap(full));
Expand Down Expand Up @@ -656,4 +668,127 @@ public Map<String, Object> props(JReleaserModel model) {
return props;
}
}


public static class Links extends AbstractModelObject<Project.Links> implements Domain {
private String homepage;
private String bugTracker;
private String faq;
private String help;
private String donation;
private String translate;
private String contact;
private String vcsBrowser;
private String contribute;

@Override
public void merge(Project.Links source) {
freezeCheck();
this.homepage = merge(this.homepage, source.homepage);
this.bugTracker = merge(this.bugTracker, source.bugTracker);
this.faq = merge(this.faq, source.faq);
this.help = merge(this.help, source.help);
this.donation = merge(this.donation, source.donation);
this.translate = merge(this.translate, source.translate);
this.contact = merge(this.contact, source.contact);
this.vcsBrowser = merge(this.vcsBrowser, source.vcsBrowser);
this.contribute = merge(this.contribute, source.contribute);
}

public String getHomepage() {
return homepage;
}

public void setHomepage(String homepage) {
freezeCheck();
this.homepage = homepage;
}

public String getBugTracker() {
return bugTracker;
}

public void setBugTracker(String bugTracker) {
freezeCheck();
this.bugTracker = bugTracker;
}

public String getFaq() {
return faq;
}

public void setFaq(String faq) {
freezeCheck();
this.faq = faq;
}

public String getHelp() {
return help;
}

public void setHelp(String help) {
freezeCheck();
this.help = help;
}

public String getDonation() {
return donation;
}

public void setDonation(String donation) {
freezeCheck();
this.donation = donation;
}

public String getTranslate() {
return translate;
}

public void setTranslate(String translate) {
freezeCheck();
this.translate = translate;
}

public String getContact() {
return contact;
}

public void setContact(String contact) {
freezeCheck();
this.contact = contact;
}

public String getVcsBrowser() {
return vcsBrowser;
}

public void setVcsBrowser(String vcsBrowser) {
freezeCheck();
this.vcsBrowser = vcsBrowser;
}

public String getContribute() {
return contribute;
}

public void setContribute(String contribute) {
freezeCheck();
this.contribute = contribute;
}

@Override
public Map<String, Object> asMap(boolean full) {
Map<String, Object> map = new LinkedHashMap<>();
if (isNotBlank(homepage)) map.put("homepage", homepage);
if (isNotBlank(bugTracker)) map.put("bugTracker", bugTracker);
if (isNotBlank(vcsBrowser)) map.put("vcsBrowser", vcsBrowser);
if (isNotBlank(faq)) map.put("faq", faq);
if (isNotBlank(help)) map.put("help", help);
if (isNotBlank(donation)) map.put("donation", donation);
if (isNotBlank(translate)) map.put("translate", translate);
if (isNotBlank(contact)) map.put("contact", contact);
if (isNotBlank(contribute)) map.put("contribute", contribute);
return map;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,15 @@ public static void postValidateProject(JReleaserContext context, JReleaserContex
project.setLicenseUrl(srcUrl);
});
}
if (isBlank(project.getLinks().getVcsBrowser())) {
project.getLinks().setVcsBrowser(context.getModel().getRelease().getGitService().getRepoUrl());
}
if (isBlank(project.getLinks().getBugTracker())) {
project.getLinks().setBugTracker(context.getModel().getRelease().getGitService().getIssueTrackerUrl());
}
if (isBlank(project.getLinks().getHomepage())) {
project.getLinks().setHomepage(project.getWebsite());
}

if (!mode.validateConfig()) return;

Expand All @@ -157,12 +166,12 @@ public static void postValidateProject(JReleaserContext context, JReleaserContex
if (isBlank(project.getDescription())) {
errors.configuration(RB.$("validation_must_not_be_blank", "project.description"));
}
if (isBlank(project.getDocsUrl())) {
project.setDocsUrl(project.getWebsite());
}
if (isBlank(project.getWebsite())) {
errors.configuration(RB.$("validation_must_not_be_blank", "project.website"));
}
if (isBlank(project.getDocsUrl())) {
project.setDocsUrl(project.getWebsite());
}
if (isBlank(project.getDocsUrl())) {
errors.configuration(RB.$("validation_must_not_be_blank", "project.docsUrl"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,18 @@ interface Project extends ExtraProperties {

void tag(String tag)

Links getLinks()

Java getJava()

Snapshot getSnapshot()

void setStereotype(String str)

void links(Action<? super Links> action)

void links(@DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = Links) Closure<Void> action)

void java(Action<? super Java> action)

void java(@DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = Java) Closure<Void> action)
Expand All @@ -83,4 +89,24 @@ interface Project extends ExtraProperties {

Property<Boolean> getFullChangelog()
}

interface Links {
Property<String> getHomepage()

Property<String> getBugTracker()

Property<String> getFaq()

Property<String> getHelp()

Property<String> getDonation()

Property<String> getTranslate()

Property<String> getContact()

Property<String> getVcsBrowser()

Property<String> getContribute()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class ProjectImpl implements Project {
final MapProperty<String, Object> extraProperties
final JavaImpl java
final SnapshotImpl snapshot
final LinksImpl links

@Inject
ProjectImpl(ObjectFactory objects,
Expand All @@ -83,6 +84,7 @@ class ProjectImpl implements Project {

java = objects.newInstance(JavaImpl, objects)
snapshot = objects.newInstance(SnapshotImpl, objects)
links = objects.newInstance(LinksImpl, objects)
}

@Override
Expand All @@ -106,6 +108,16 @@ class ProjectImpl implements Project {
}
}

@Override
void links(Action<? super Links> action) {
action.execute(links)
}

@Override
void links(@DelegatesTo(strategy = Closure.DELEGATE_FIRST, value = Links) Closure<Void> action) {
ConfigureUtil.configure(action, links)
}

@Override
void java(Action<? super Java> action) {
action.execute(java)
Expand Down Expand Up @@ -145,6 +157,7 @@ class ProjectImpl implements Project {
if (extraProperties.present) project.extraProperties.putAll(extraProperties.get())
project.java = java.toModel()
project.snapshot = snapshot.toModel()
project.links = links.toModel()
project
}

Expand Down Expand Up @@ -176,4 +189,58 @@ class ProjectImpl implements Project {
snapshot
}
}


@CompileStatic
static class LinksImpl implements Links {
final Property<String> homepage
final Property<String> bugTracker
final Property<String> faq
final Property<String> help
final Property<String> donation
final Property<String> translate
final Property<String> contact
final Property<String> vcsBrowser
final Property<String> contribute

@Inject
LinksImpl(ObjectFactory objects) {
homepage = objects.property(String).convention(Providers.notDefined())
bugTracker = objects.property(String).convention(Providers.notDefined())
faq = objects.property(String).convention(Providers.notDefined())
help = objects.property(String).convention(Providers.notDefined())
donation = objects.property(String).convention(Providers.notDefined())
translate = objects.property(String).convention(Providers.notDefined())
contact = objects.property(String).convention(Providers.notDefined())
vcsBrowser = objects.property(String).convention(Providers.notDefined())
contribute = objects.property(String).convention(Providers.notDefined())
}

@Internal
boolean isSet() {
homepage.present ||
bugTracker.present ||
faq.present ||
help.present ||
donation.present ||
translate.present ||
contact.present ||
vcsBrowser.present ||
contribute.present
}

org.jreleaser.model.Project.Links toModel() {
org.jreleaser.model.Project.Links links = new org.jreleaser.model.Project.Links()
if (homepage.present) links.homepage = homepage.get()
if (bugTracker.present) links.bugTracker = bugTracker.get()
if (faq.present) links.faq = faq.get()
if (help.present) links.help = help.get()
if (donation.present) links.donation = donation.get()
if (translate.present) links.translate = translate.get()
if (contact.present) links.contact = contact.get()
if (vcsBrowser.present) links.vcsBrowser = vcsBrowser.get()
if (contribute.present) links.contribute = contribute.get()
links
}
}
}

0 comments on commit f926530

Please sign in to comment.