Skip to content

Commit 071a0c1

Browse files
authored
Merge pull request #2524 from GIP-RECIA/feat_alternativeMaximizedLinkTarget
feat: new portlet definition attribute: alternativeMaximizedLinkTarget
2 parents ab139a8 + 7909bba commit 071a0c1

File tree

25 files changed

+184
-18
lines changed

25 files changed

+184
-18
lines changed

uPortal-api/uPortal-api-internal/src/test/java/org/apereo/portal/portlets/layout/dlm/remoting/registry/v43/PortletDefinitionBeanTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,11 @@ public String getAlternativeMaximizedLink() {
494494
return null;
495495
}
496496

497+
@Override
498+
public String getAlternativeMaximizedLinkTarget() {
499+
return null;
500+
}
501+
497502
@Override
498503
public String getTarget() {
499504
return null;

uPortal-api/uPortal-api-rest/src/main/java/org/apereo/portal/rest/LayoutRESTController.java

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ private void setAltMaxURL(
156156
if (alternativeMaximizedLink != null) {
157157
portlet.setUrl(alternativeMaximizedLink);
158158
portlet.setAltMaxUrl(true);
159+
portlet.setTarget(def.getAlternativeMaximizedLinkTarget());
159160
} else {
160161
// get the maximized URL for this portlet
161162
final IPortalUrlBuilder portalUrlBuilder =

uPortal-content/uPortal-content-portlet/src/main/java/org/apereo/portal/portlet/dao/jpa/PortletDefinitionImpl.java

+17
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,23 @@ public String getAlternativeMaximizedLink() {
507507
return null;
508508
}
509509

510+
@Override
511+
public String getAlternativeMaximizedLinkTarget() {
512+
final IPortletDefinitionParameter alternativeMaximizedLinkTargetParameter =
513+
getParameter(ALT_MAX_LINK_TARGET_PARAM);
514+
515+
if (null != alternativeMaximizedLinkTargetParameter) {
516+
final String alternativeMaximizedLinkTarget =
517+
alternativeMaximizedLinkTargetParameter.getValue();
518+
519+
if (StringUtils.hasText(alternativeMaximizedLinkTarget)) {
520+
return alternativeMaximizedLinkTarget;
521+
}
522+
}
523+
524+
return null;
525+
}
526+
510527
@Override
511528
public String getTarget() {
512529
final IPortletDefinitionParameter targetParameter = getParameter(TARGET_PARAM);

uPortal-core/src/main/java/org/apereo/portal/portlet/om/IPortletDefinition.java

+20
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ public interface IPortletDefinition extends IBasicEntity, IPortalData {
4141
*/
4242
String ALT_MAX_LINK_PARAM = "alternativeMaximizedLink";
4343

44+
/**
45+
* The name of the portlet parameter that if present represents an alternative URL target that
46+
* ought to be used to "maximize" the defined portlet, eg: _blank, _self, etc...
47+
*
48+
* <p>This is useful for portlets that when maximized ought to instead be the external URL or
49+
* web application that they're representing in the portal.
50+
*/
51+
String ALT_MAX_LINK_TARGET_PARAM = "alternativeMaximizedLinkTarget";
52+
4453
/** A portlet parameter that specifies a target for the flyout, eg : _blank */
4554
String TARGET_PARAM = "target";
4655

@@ -149,6 +158,17 @@ public interface IPortletDefinition extends IBasicEntity, IPortalData {
149158
*/
150159
String getAlternativeMaximizedLink();
151160

161+
/**
162+
* Returns the alternative maximized link window target associated with this portlet definition,
163+
* or null if none.
164+
*
165+
* <p>Syntactic sugar for parsing potential alternative maximized link window target
166+
*
167+
* @return String representing the window target, or null if none.
168+
* @since 4.2
169+
*/
170+
String getAlternativeMaximizedLinkTarget();
171+
152172
/**
153173
* Syntactic sugar for getting the target parameter from the portlet parameters.
154174
*

uPortal-core/src/test/java/org/apereo/portal/portlet/om/PortletParameterUtilityTest.java

+4
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,18 @@ public void convertsParameterMapToStringMap() {
2121
IPortletDefinitionParameter altMaxUrlParam =
2222
new PortletDefinitionParameter(
2323
"alternativeMaximizedLink", "https://public.my.wisc.edu");
24+
IPortletDefinitionParameter altMaxUrlTargetParam =
25+
new PortletDefinitionParameter("alternativeMaximizedLinkTarget", "_self");
2426

2527
input.put("icon", iconParam);
2628
input.put("alternativeMaximizedLink", altMaxUrlParam);
29+
input.put("alternativeMaximizedLinkTarget", altMaxUrlTargetParam);
2730

2831
Map<String, String> expected = new HashMap<>(2);
2932

3033
expected.put("icon", "dashboard");
3134
expected.put("alternativeMaximizedLink", "https://public.my.wisc.edu");
35+
expected.put("alternativeMaximizedLinkTarget", "_self");
3236

3337
assertEquals(expected, PortletParameterUtility.parameterMapToStringStringMap(input));
3438
}

uPortal-layout/uPortal-layout-core/src/main/java/org/apereo/portal/layout/LayoutPortlet.java

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public LayoutPortlet(IPortletDefinition portletDef) {
6868
url = portletDef.getAlternativeMaximizedLink();
6969
target = portletDef.getTarget();
7070
isAltMaxUrl = StringUtils.isNotBlank(url);
71+
if (isAltMaxUrl) target = portletDef.getAlternativeMaximizedLinkTarget();
7172
IPortletDefinitionParameter iconParam = portletDef.getParameter("iconUrl");
7273
if (iconParam != null) {
7374
this.setIconUrl(iconParam.getValue());

uPortal-layout/uPortal-layout-impl/src/main/java/org/apereo/portal/layout/dlm/MissingPortletDefinition.java

+5
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@ public String getAlternativeMaximizedLink() {
7575
return null;
7676
}
7777

78+
@Override
79+
public String getAlternativeMaximizedLinkTarget() {
80+
return null;
81+
}
82+
7883
@Override
7984
public String getTarget() {
8085
return null;

uPortal-marketplace/src/main/java/org/apereo/portal/portlet/marketplace/MarketplacePortletDefinition.java

+5
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,11 @@ public String getAlternativeMaximizedLink() {
552552
return this.portletDefinition.getAlternativeMaximizedLink();
553553
}
554554

555+
@Override
556+
public String getAlternativeMaximizedLinkTarget() {
557+
return this.portletDefinition.getAlternativeMaximizedLinkTarget();
558+
}
559+
555560
@Override
556561
public void setFName(String fname) {
557562
this.portletDefinition.setFName(fname);

uPortal-marketplace/src/test/java/org/apereo/portal/portlet/marketplace/MarketplacePortletDefinitionTest.java

+12
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,18 @@ public void testRenderUrlIsAlternativeMaximizedLinkWhenPresent() {
6868
assertEquals("http://apereo.org", marketplacePortletDefinition.getRenderUrl());
6969
}
7070

71+
/**
72+
* Test that a MarketplacePortletDefinition passes through the alternativeMaximizedLinkTarget of
73+
* the IPortletDefinition it wraps.
74+
*/
75+
@Test
76+
public void testReflectsWrappedDefinitionAlternativeMaximizedLinkTarget() {
77+
78+
when(portletDefinition.getAlternativeMaximizedLinkTarget()).thenReturn("_self");
79+
80+
assertEquals("_self", marketplacePortletDefinition.getAlternativeMaximizedLinkTarget());
81+
}
82+
7183
/** Test implementation of equals(). */
7284
@Test
7385
public void testEquals() {

uPortal-rendering/src/main/java/org/apereo/portal/portlet/registry/PortletEntityRegistryImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,11 @@ public String getAlternativeMaximizedLink() {
965965
return null;
966966
}
967967

968+
@Override
969+
public String getAlternativeMaximizedLinkTarget() {
970+
return null;
971+
}
972+
968973
@Override
969974
public String getTitle() {
970975
return null;

uPortal-webapp/src/main/resources/layout/structure/columns/columns.xsl

+25-1
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,18 @@
282282
</xsl:attribute>
283283
</xsl:when>
284284
</xsl:choose>
285+
<xsl:choose>
286+
<xsl:when test="parameter[@name='PORTLET.alternativeMaximizedLinkTarget']">
287+
<xsl:attribute name="alternativeMaximizedLinkTarget">
288+
<xsl:value-of select="parameter[@name='PORTLET.alternativeMaximizedLinkTarget']/@value"/>
289+
</xsl:attribute>
290+
</xsl:when>
291+
<xsl:when test="parameter[@name='alternativeMaximizedLinkTarget']">
292+
<xsl:attribute name="alternativeMaximizedLinkTarget">
293+
<xsl:value-of select="parameter[@name='alternativeMaximizedLinkTarget']/@value"/>
294+
</xsl:attribute>
295+
</xsl:when>
296+
</xsl:choose>
285297
</sidebarChannel>
286298
</xsl:for-each>
287299
</xsl:for-each>
@@ -416,6 +428,18 @@
416428
</xsl:attribute>
417429
</xsl:when>
418430
</xsl:choose>
431+
<xsl:choose>
432+
<xsl:when test="parameter[@name='PORTLET.alternativeMaximizedLinkTarget']">
433+
<xsl:attribute name="alternativeMaximizedLinkTarget">
434+
<xsl:value-of select="parameter[@name='PORTLET.alternativeMaximizedLinkTarget']/@value"/>
435+
</xsl:attribute>
436+
</xsl:when>
437+
<xsl:when test="parameter[@name='alternativeMaximizedLinkTarget']">
438+
<xsl:attribute name="alternativeMaximizedLinkTarget">
439+
<xsl:value-of select="parameter[@name='alternativeMaximizedLinkTarget']/@value"/>
440+
</xsl:attribute>
441+
</xsl:when>
442+
</xsl:choose>
419443
</tabChannel>
420444
</xsl:template>
421445

@@ -430,4 +454,4 @@
430454
</footer>
431455
</xsl:template>
432456

433-
</xsl:stylesheet>
457+
</xsl:stylesheet>

uPortal-webapp/src/main/resources/layout/theme/respondr/content.xsl

+17-3
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,14 @@
340340
<xsl:choose>
341341
<xsl:when test="parameter[@name='alternativeMaximizedLink'] and string-length(parameter[@name='alternativeMaximizedLink']/@value) > 0">
342342
<xsl:attribute name="href"><xsl:value-of select="parameter[@name='alternativeMaximizedLink']/@value" /></xsl:attribute>
343-
<xsl:attribute name="target">_blank</xsl:attribute>
343+
<xsl:choose>
344+
<xsl:when test="parameter[@name='alternativeMaximizedLinkTarget'] and string-length(parameter[@name='alternativeMaximizedLinkTarget']/@value) > 0">
345+
<xsl:attribute name="target"><xsl:value-of select="parameter[@name='alternativeMaximizedLinkTarget']/@value" /></xsl:attribute>
346+
</xsl:when>
347+
<xsl:otherwise>
348+
<xsl:attribute name="target">_blank</xsl:attribute>
349+
</xsl:otherwise>
350+
</xsl:choose>
344351
<xsl:attribute name="rel">noopener noreferrer</xsl:attribute>
345352
<xsl:attribute name="class">externalLink</xsl:attribute>
346353
</xsl:when>
@@ -559,7 +566,14 @@
559566
<xsl:choose>
560567
<xsl:when test="parameter[@name='alternativeMaximizedLink'] and string-length(parameter[@name='alternativeMaximizedLink']/@value) > 0">
561568
<xsl:attribute name="href"><xsl:value-of select="parameter[@name='alternativeMaximizedLink']/@value" /></xsl:attribute>
562-
<xsl:attribute name="target">_blank</xsl:attribute>
569+
<xsl:choose>
570+
<xsl:when test="parameter[@name='alternativeMaximizedLinkTarget'] and string-length(parameter[@name='alternativeMaximizedLinkTarget']/@value) > 0">
571+
<xsl:attribute name="target"><xsl:value-of select="parameter[@name='alternativeMaximizedLinkTarget']/@value" /></xsl:attribute>
572+
</xsl:when>
573+
<xsl:otherwise>
574+
<xsl:attribute name="target">_blank</xsl:attribute>
575+
</xsl:otherwise>
576+
</xsl:choose>
563577
<xsl:attribute name="rel">noopener noreferrer</xsl:attribute>
564578
<xsl:attribute name="class">up-portlet-control focus externalLink</xsl:attribute>
565579
</xsl:when>
@@ -758,4 +772,4 @@
758772
</xsl:template>
759773
<!-- ========== TEMPLATE: PORTLET CONTROLS ========== -->
760774

761-
</xsl:stylesheet>
775+
</xsl:stylesheet>

uPortal-webapp/src/main/resources/layout/theme/respondr/navigation.xsl

+9-2
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,14 @@
368368
<xsl:choose>
369369
<xsl:when test="@alternativeMaximizedLink and string-length(@alternativeMaximizedLink) > 0">
370370
<xsl:attribute name="href"><xsl:value-of select="@alternativeMaximizedLink" /></xsl:attribute>
371-
<xsl:attribute name="target">_blank</xsl:attribute>
371+
<xsl:choose>
372+
<xsl:when test="@alternativeMaximizedLinkTarget and string-length(@alternativeMaximizedLinkTarget) > 0">
373+
<xsl:attribute name="target"><xsl:value-of select="@alternativeMaximizedLinkTarget" /></xsl:attribute>
374+
</xsl:when>
375+
<xsl:otherwise>
376+
<xsl:attribute name="target">_blank</xsl:attribute>
377+
</xsl:otherwise>
378+
</xsl:choose>
372379
<xsl:attribute name="rel">noopener noreferrer</xsl:attribute>
373380
<xsl:attribute name="class">portal-subnav-link externalLink</xsl:attribute>
374381
</xsl:when>
@@ -417,4 +424,4 @@
417424
</xsl:template>
418425
<!-- =================================================== -->
419426

420-
</xsl:stylesheet>
427+
</xsl:stylesheet>

uPortal-webapp/src/main/resources/org/apereo/portal/portlets/SharedParameters.cpd.xml

+8-1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,13 @@
5151
<single-text-parameter-input display="text"/>
5252
</parameter>
5353

54+
<parameter>
55+
<name>alternativeMaximizedLinkTarget</name>
56+
<label>open.alternative.url.target.in.maximized.view</label>
57+
<description>Window target of alternate URL to display when the portlet is in MAXIMIZED mode.</description>
58+
<single-text-parameter-input display="text"/>
59+
</parameter>
60+
5461
<parameter>
5562
<name>chromeStyle</name>
5663
<label>chrome.style</label>
@@ -121,4 +128,4 @@
121128

122129
</step>
123130

124-
</portlet-publishing-definition>
131+
</portlet-publishing-definition>

uPortal-webapp/src/main/resources/properties/i18n/Messages.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ number.times=# Times
446446
object.count=Object count
447447
on.disk.hits=On disk hits
448448
open.alternative.url.in.maximized.view=Alternative link in maximized view
449+
open.alternative.url.target.in.maximized.view=Window target of alternative link in maximized view
449450
option=Option
450451
org.apereo.portal.tenants.AttributeValidatingOperationsListener.name=Attribute Validation
451452
org.apereo.portal.tenants.JpaPersistenceTenantOperationsListener.name=Tenant Persistence
@@ -809,4 +810,4 @@ available.reports=Available Reports
809810
report.list=Report List
810811
generate.new.report=Generate a new {0} Report
811812
# The placeholder $0 is used by Javascript to substitute a parameter into
812-
report.titleWithSingularFields={0}: $0
813+
report.titleWithSingularFields={0}: $0

uPortal-webapp/src/main/resources/properties/i18n/Messages_de.properties

+3-1
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,8 @@ nothing.selected=Nichts ausgew\u00e4hlt
317317
number.times=# Times
318318
object.count=Object z\u00e4hlen
319319
on.disk.hits=Auf der Festplatte Treffern
320+
open.alternative.url.in.maximized.view=Alternativen Links in maximierter Ansicht
321+
open.alternative.url.target.in.maximized.view=Fensterziel des alternativen Links in maximierter Ansicht
320322
option=Option
321323
original.value=Original Preis
322324
owner=Besitzer
@@ -517,4 +519,4 @@ you.are.signed.in.as=Sie sind angemeldet als
517519
your.account.has.been.successfully.updated.your.changes.will.be.visible.upon.your.next.login=Ihr Konto wurde erfolgreich aktualisiert. Ihre \u00c4nderungen werden sichtbar bei Ihrem n\u00e4chsten Login.
518520
your.password.has.been.updated.successfully=Ihr Passwort wurde erfolgreich aktualisiert
519521
your.selection=Ihre Auswahl
520-
your.selections=Ihre Auswahl
522+
your.selections=Ihre Auswahl

uPortal-webapp/src/main/resources/properties/i18n/Messages_es.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ number.times=# veces
442442
object.count=Objeto de contar con
443443
on.disk.hits=El disco de \u00e9xitos
444444
open.alternative.url.in.maximized.view=Enlace alternativo en vista maximizada
445+
open.alternative.url.target.in.maximized.view=Ventana de destino de enlace alternativo en vista maximizada
445446
option=Opci\u00f3n
446447
org.apereo.portal.tenants.AttributeValidatingOperationsListener.name=Validaci\u00f3n de atributos
447448
org.apereo.portal.tenants.JpaPersistenceTenantOperationsListener.name=Persistencia del inquilino
@@ -788,4 +789,4 @@ you.are.signed.in.as=Has accedido como
788789
your.account.has.been.successfully.updated.your.changes.will.be.visible.upon.your.next.login=Su cuenta ha sido actualizado correctamente. Los cambios ser\u00e1n visibles en el siguiente inicio de sesi\u00f3n.
789790
your.password.has.been.updated.successfully=Su contrase\u00f1a se ha actualizado con \u00e9xito
790791
your.selection=Su Selecci\u00f3n
791-
your.selections=Con su selecci\u00f3n
792+
your.selections=Con su selecci\u00f3n

uPortal-webapp/src/main/resources/properties/i18n/Messages_fr.properties

+2-1
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,7 @@ number.times=# Nombre de fois
444444
object.count=Nombre d''objets
445445
on.disk.hits=Sur les acc\u00E8s disques
446446
open.alternative.url.in.maximized.view=Lien alternatif en vue maximis\u00E9e
447+
open.alternative.url.target.in.maximized.view=Fen\u00Eatre cible du lien alternatif en vue maximis\u00E9e
447448
option=Option
448449
org.apereo.portal.tenants.AttributeValidatingOperationsListener.name=Validation de l''attribut
449450
org.apereo.portal.tenants.JpaPersistenceTenantOperationsListener.name=Persistance du tenant
@@ -805,4 +806,4 @@ report.titleWithSingularFields={0}\u00A0: $0
805806
principals.and.categories=Principals et cat\u00E9gories
806807
success.add.folder=\u00C9l\u00E9ment ajout\u00E9
807808
success.move.element=D\u00E9placement r\u00E9ussi
808-
success.element.update=Mise \u00E0 jour r\u00E9ussie
809+
success.element.update=Mise \u00E0 jour r\u00E9ussie

uPortal-webapp/src/main/resources/properties/i18n/Messages_ja.properties

+3-1
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,8 @@ no.results=\u691c\u7d22\u7d50\u679c\u306a\u3057
316316
nothing.selected=\u9078\u629e\u306a\u3057
317317
number.times=\u56de\u6570
318318
object.count=\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6570
319+
open.alternative.url.in.maximized.view=\u6700\u5927\u5316\u3055\u308c\u305f\u30d3\u30e5\u30fc\u306e\u4ee3\u66ff\u30ea\u30f3\u30af
320+
open.alternative.url.target.in.maximized.view=\u6700\u5927\u5316\u3055\u308c\u305f\u30d3\u30e5\u30fc\u3067\u306e\u4ee3\u66ff\u30ea\u30f3\u30af\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u30bf\u30fc\u30b2\u30c3\u30c8
319321
on.disk.hits=\u30aa\u30f3\u30c7\u30a3\u30b9\u30af\u30d2\u30c3\u30c8\u6570
320322
option=\u30aa\u30d7\u30b7\u30e7\u30f3
321323
original.value=\u5143\u306e\u5024
@@ -517,4 +519,4 @@ you.are.signed.in.as=\u30b5\u30a4\u30f3\u30a4\u30f3\u30e6\u30fc\u30b6\uff1a
517519
your.account.has.been.successfully.updated.your.changes.will.be.visible.upon.your.next.login=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\uff0e\u5909\u66f4\u5185\u5bb9\u306f\u6b21\u56de\u306e\u30ed\u30b0\u30a4\u30f3\u4ee5\u964d\u306b\u78ba\u8a8d\u3067\u304d\u307e\u3059\uff0e
518520
your.password.has.been.updated.successfully=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f
519521
your.selection=\u9078\u629e\u5185\u5bb9
520-
your.selections=\u9078\u629e\u5185\u5bb9
522+
your.selections=\u9078\u629e\u5185\u5bb9

uPortal-webapp/src/main/resources/properties/i18n/Messages_lv.properties

+3-1
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,8 @@ nothing.selected=Nekas nav izv\u0113l\u0113ts
329329
number.times=# Reizes
330330
object.count=Objektu skaits
331331
on.disk.hits=Tr\u0101p\u012bjumi disk\u0101
332+
open.alternative.url.in.maximized.view=Alternat\u012bva saite maksimiz\u0113t\u0101 skat\u0101
333+
open.alternative.url.target.in.maximized.view=Alternat\u012bv\u0101s saites loga m\u0113r\u0137is maksimiz\u0113taj\u0101 skat\u0101
332334
option=Iesp\u0113ja
333335
original.value=S\u0101kotn\u0113j\u0101 v\u0113rt\u012bba
334336
owner=\u012apa\u0161nieks
@@ -539,4 +541,4 @@ you.are.signed.in.as=J\u016bs esat ien\u0101cis k\u0101
539541
your.account.has.been.successfully.updated.your.changes.will.be.visible.upon.your.next.login=J\u016bsu konts ir veiksm\u012bgi atjaunin\u0101ts. J\u016bsu veikt\u0101s izmai\u0146as b\u016bs redzama uz j\u016bsu n\u0101kamo pieteik\u0161an\u0101s.
540542
your.password.has.been.updated.successfully=J\u016bsu parole ir veiksm\u012bgi iestat\u012bta
541543
your.selection=J\u016bsu izv\u0113le
542-
your.selections=J\u016bsu izv\u0113les
544+
your.selections=J\u016bsu izv\u0113les

0 commit comments

Comments
 (0)