Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2643 when adding new banner validations are improperly shown in installments #2646

Original file line number Diff line number Diff line change
@@ -1,90 +1,123 @@
package edu.harvard.iq.dataverse.persistence.dataverse.bannersandmessages;

import edu.harvard.iq.dataverse.persistence.dataverse.Dataverse;
import static edu.harvard.iq.dataverse.common.DateUtil.convertToDate;
import static javax.persistence.CascadeType.ALL;
import static javax.persistence.FetchType.LAZY;
import static javax.persistence.GenerationType.IDENTITY;
import static javax.persistence.TemporalType.TIMESTAMP;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import edu.harvard.iq.dataverse.common.DataverseClock;
import edu.harvard.iq.dataverse.persistence.JpaEntity;
import edu.harvard.iq.dataverse.persistence.dataverse.Dataverse;

@Entity
public class DataverseBanner {
public class DataverseBanner implements JpaEntity<Long> {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue(strategy = IDENTITY)
private Long id;

@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
@Temporal(TIMESTAMP)
private Date fromTime;

@Column(nullable = false)
@Temporal(TemporalType.TIMESTAMP)
@Temporal(TIMESTAMP)
private Date toTime;

private boolean active;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "dataverseBanner")
private List<DataverseLocalizedBanner> dataverseLocalizedBanner = new ArrayList<>();
@OneToMany(cascade = ALL, orphanRemoval = true, mappedBy = "dataverseBanner")
private List<DataverseLocalizedBanner> localizedBanners = new ArrayList<>();

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = LAZY)
private Dataverse dataverse;

@Override
public Long getId() {
return id;
return this.id;
}

public void setId(Long id) {
public void setId(final Long id) {
this.id = id;
}

public Date getFromTime() {
return fromTime;
return this.fromTime;
}

public void setFromTime(Date fromTime) {
public void setFromTime(final Date fromTime) {
this.fromTime = fromTime;
}

public Date getToTime() {
return toTime;
return this.toTime;
}

public void setToTime(Date toTime) {
public void setToTime(final Date toTime) {
this.toTime = toTime;
}

public boolean isFromTimePresent() {
return this.fromTime != null;
}

public boolean isToTimePresent() {
return this.toTime != null;
}

public boolean isFromTimeBeforeEndTime() {
return this.fromTime.before(this.toTime);
}

public boolean isToTimeInFuture() {
return this.toTime.after(convertToDate(DataverseClock.now()));
}

public boolean isActive() {
return active;
return this.active;
}

public void setActive(boolean active) {
public void setActive(final boolean active) {
this.active = active;
}

public List<DataverseLocalizedBanner> getDataverseLocalizedBanner() {
return dataverseLocalizedBanner;
public List<DataverseLocalizedBanner> getLocalizedBanners() {
return this.localizedBanners;
}

public void setLocalizedBanners(
final List<DataverseLocalizedBanner> localizedBanners) {
this.localizedBanners = localizedBanners;
}

public void addLocalizedBanner(final String locale) {
this.localizedBanners.add(new DataverseLocalizedBanner(locale));
}

public void setDataverseLocalizedBanner(List<DataverseLocalizedBanner> dataverseLocalizedBanner) {
this.dataverseLocalizedBanner = dataverseLocalizedBanner;
public Optional<DataverseLocalizedBanner> getBannerFor(final String locale) {
return this.localizedBanners.stream()
.filter(banner -> banner.getLocale().equals(locale)).findAny();
}

public Dataverse getDataverse() {
return dataverse;
return this.dataverse;
}

public void setDataverse(Dataverse dataverse) {
public void setDataverse(final Dataverse dataverse) {
this.dataverse = dataverse;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package edu.harvard.iq.dataverse.persistence.dataverse.bannersandmessages;

import javax.ejb.Singleton;

import edu.harvard.iq.dataverse.persistence.JpaRepository;

@Singleton
public class DataverseBannerRepository extends JpaRepository<Long, DataverseBanner> {

public DataverseBannerRepository() {
super(DataverseBanner.class);
}

}
Original file line number Diff line number Diff line change
@@ -1,29 +1,38 @@
package edu.harvard.iq.dataverse.persistence.dataverse.bannersandmessages;

import static javax.persistence.FetchType.LAZY;
import static javax.persistence.GenerationType.IDENTITY;
import static org.apache.commons.lang3.StringUtils.isEmpty;
import static org.apache.commons.lang3.StringUtils.trim;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import java.util.Optional;

import edu.harvard.iq.dataverse.persistence.JpaEntity;

@Entity
public class DataverseLocalizedBanner {
public class DataverseLocalizedBanner implements JpaEntity<Long> {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@GeneratedValue(strategy = IDENTITY)
private Long id;

@Column(nullable = false)
private String locale;

@Column(nullable = false)
@Lob
@Basic(fetch = FetchType.LAZY)
@Basic(fetch = LAZY)
private byte[] image;

private String contentType;
Expand All @@ -32,62 +41,96 @@ public class DataverseLocalizedBanner {

private String imageLink;

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = LAZY)
private DataverseBanner dataverseBanner;

public DataverseLocalizedBanner() {
}

public DataverseLocalizedBanner(final String locale) {
this.locale = locale;
}

@Override
public Long getId() {
return id;
return this.id;
}

public void setId(Long id) {
public void setId(final Long id) {
this.id = id;
}

public String getLocale() {
return locale;
return this.locale;
}

public void setLocale(String locale) {
public void setLocale(final String locale) {
this.locale = locale;
}

public byte[] getImage() {
return image;
return this.image;
}

public void setImage(byte[] image) {
public InputStream getImageAsStream() {
return new ByteArrayInputStream(this.image);
}

public boolean isImagePresent() {
return this.image != null;
}

public void setImage(final byte[] image) {
this.image = image;
}

public String getContentType() {
return contentType;
return this.contentType;
}

public void setContentType(String contentType) {
public void setContentType(final String contentType) {
this.contentType = contentType;
}

public String getImageName() {
return imageName;
return this.imageName;
}

public void setImageName(String imageName) {
public void setImageName(final String imageName) {
this.imageName = imageName;
}

public Optional<String> getImageLink() {
return Optional.ofNullable(imageLink);
public String getImageLink() {
return this.imageLink;
}

public void setImageLink(String imageLink) {
this.imageLink = imageLink;
public void setImageLink(final String link) {
this.imageLink = trim(link);
}

public boolean isImageLinkValid() {
if (isEmpty(this.imageLink)) {
return true;
} else {
try {
new URL(this.imageLink);
return true;
} catch (final MalformedURLException e) {
return false;
}
}
}

public DataverseBanner getDataverseBanner() {
return dataverseBanner;
return this.dataverseBanner;
}

public void setDataverseBanner(DataverseBanner dataverseBanner) {
public void setDataverseBanner(final DataverseBanner dataverseBanner) {
this.dataverseBanner = dataverseBanner;
}

public static boolean isOfAllowableType(final String bannerFileName) {
return bannerFileName.endsWith(".jpg") || bannerFileName.endsWith(".jpeg")
|| bannerFileName.endsWith(".png");
}
}
3 changes: 3 additions & 0 deletions dataverse-persistence/src/main/resources/Bundle_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ show=Show
hide=Hide
opensInNewTab=(opens in new tab)
copyToClipboard=Copy to clipboard
field.required=Value required.

common.forms.asterisk.tip=Asterisks indicate required fields
common.forms.autocomplete.resultsMessage=results are available, use up and down arrow keys to navigate
Expand Down Expand Up @@ -189,6 +190,7 @@ dataversemessages.banners.sizeError=The image size was too big.
dataversemessages.banners.resolutionError=The image could not be uploaded. Please try again with a image with smaller resolution.
dataversemessages.banners.missingError=The image is missing
dataversemessages.banners.extensionError=The image could not be uploaded. Please try again with a JPG or PNG file.
dataversemessages.banners.formatError=The image is malformed.
dataversemessages.textmessages.new=New Message
dataversemessages.textmessages.new.success=Message was saved.
dataversemessages.textmessages.noResults=No messages found.
Expand Down Expand Up @@ -2874,6 +2876,7 @@ edittextmessages.message.watermark=Write up text message for this dataverse.
edittextmessages.message.tip=Shown while visiting dataverse using application language option: {0}.
textmessages.endDateTime.valid=End date and time must not be earlier than starting date and time.
textmessages.endDateTime.future=End date and time must be a future date and time.
textmessages.url.invalid=Invalid URL.
error.general.message=An unknown error occured.
#language tags
language.en=English
Expand Down
3 changes: 3 additions & 0 deletions dataverse-persistence/src/main/resources/Bundle_pl.properties
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ show=Poka\u017C
hide=Schowaj
opensInNewTab=(otwiera si\u0119 w nowej zak\u0142adce)
copyToClipboard=Kopiuj do schowka
field.required=Pole wymagane.

common.forms.asterisk.tip=Wymagane pola oznaczone s\u0105 gwiazdk\u0105
common.forms.autocomplete.resultsMessage=wynik\u00F3w jest dost\u0119pnych, u\u017Cyj klawiszy strza\u0142ek w g\u00F3r\u0119 i w d\u00F3\u0142 by wybra\u0107
Expand Down Expand Up @@ -189,6 +190,7 @@ dataversemessages.banners.sizeError=Za du\u017Cy rozmiar obrazka
dataversemessages.banners.resolutionError=Nie uda\u0142o si\u0119 wczyta\u0107 pliku. Spr\u00F3buj ponownie z plikiem graficznym o ni\u017Cszej rozdzielczo\u015Bci.
dataversemessages.banners.missingError=Brak obrazka
dataversemessages.banners.extensionError=Nie uda\u0142o si\u0119 wczyta\u0107 pliku. Spr\u00F3buj ponownie z plikiem w formacie JPG, PNG.
dataversemessages.banners.formatError=Obraz jest uszkodzony.
dataversemessages.textmessages.new=Nowy komunikat
dataversemessages.textmessages.new.success=Komunikat zosta\u0142 zapisany.
dataversemessages.textmessages.noResults=Brak komunikat\u00F3w.
Expand Down Expand Up @@ -2822,6 +2824,7 @@ edittextmessages.message.watermark=Wpisz tre\u015B\u0107 komunikatu dla tej kole
edittextmessages.message.tip=Ustawienie j\u0119zyka aplikacji dla kt\u00F3rej komunikat bedzie widoczny: {0}.
textmessages.endDateTime.valid=Data i czas zako\u0144czenia nie mo\u017Ce by\u0107 wcze\u015Bniejsza od daty i czasu rozpocz\u0119cia.
textmessages.endDateTime.future=Data i czas zako\u0144czenia musi by\u0107 dat\u0105 i czasem w przysz\u0142o\u015Bci.
textmessages.url.invalid=Nieprawid\u0142owy adres URL.
error.general.message=Wyst\u0105pi\u0142 nieznany b\u0142\u0105d.
#language tags
language.en=Angielski
Expand Down
Loading