/*
*
* Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
* This file is part of jAPS software.
* jAPS is a free software;
* you can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
*/
package com.agiletec.plugins.jacms.aps.system.services.content.model.extraAttribute;
import java.util.ArrayList;
import java.util.List;
import com.agiletec.aps.system.common.entity.model.attribute.HypertextAttribute;
import com.agiletec.aps.system.services.lang.Lang;
import com.agiletec.plugins.jacms.aps.system.services.content.model.CmsAttributeReference;
import com.agiletec.plugins.jacms.aps.system.services.content.model.SymbolicLink;
import com.agiletec.plugins.jacms.aps.system.services.content.model.extraAttribute.util.HypertextAttributeUtil;
/**
* Rappresenta una informazione di tipo "ipertesto" specifico per il cms.
* @author W.Ambu - E.Santoboni
*/
public class CmsHypertextAttribute extends HypertextAttribute implements IReferenceableAttribute {
/**
* Restituisce il testo con modificato con eliminate
* l'apertura del primo paragrafo e la chiusura dell'ultimo.
* @return Il testo modificato.
*/
public String getTextPLess() {
String masterText = this.getText();
String text = masterText.replaceFirst("<p>", "");
StringBuffer sbuffer = new StringBuffer(text);
int lastIndexOfP = sbuffer.lastIndexOf("</p>");
if (lastIndexOfP != -1) {
sbuffer.replace(lastIndexOfP, lastIndexOfP + 4, "");
}
return sbuffer.toString();
}
/**
* Restituisce la porzione di testo totale antecedente ad una
* eventuale immagine da inserire internamente all'ipertesto.
* Il testo viene ricavato dal testo principale la cui fine è corrispondente
* all'inizio del paragrafo (apertura inclusa) più vicino al punto
* del testo completo ricavato dalla percentuale specificata.
* @param percent La percentuale, rispetto all'inizio del testo,
* rispetto al quale ricavare il punto di taglio.
* @return La porzione di testo totale antecedente ad una eventuale immagine.
*/
public String getTextBeforeImage(int percent) {
String text = super.getText();
int cutPoint = HypertextAttributeUtil.getIndexCutPoint(text, percent);
String textBefore = text.substring(0, cutPoint);
return textBefore;
}
/**
* Restituisce la porzione di testo totale successivo ad una
* eventuale immagine da inserire internamente all'ipertesto.
* Il testo viene ricavato dal testo principale il cui inizio è corrispondente
* all'inizio del paragrafo (apertura esclusa) più vicino al punto
* del testo completo ricavato dalla percentuale specificata.
* @param percent La percentuale, rispetto all'inizio del testo,
* rispetto al quale ricavare il punto di taglio.
* @return La porzione di testo totale successiva ad una eventuale immagine.
*/
public String getTextAfterImage(int percent) {
String text = super.getText();
int cutPoint = HypertextAttributeUtil.getIndexCutPoint(text, percent);
String textAfter = text.substring(cutPoint);
return textAfter;
}
/**
* Restituisce la porzione di testo totale interposto tra due
* eventuali immagini da inserire internamente all'ipertesto.
* Il testo viene ricavato dal testo principale il cui inizio è corrispondente
* all'inizio del paragrafo (apertura esclusa) più vicino al punto
* del testo completo ricavato dalla percentuale start specificata, e la cui fine
* è corrispondente all'inizio del paragrafo (apertura inclusa) più vicina al punto
* del testo completo ricavato dalla percentuale percentEnd specificata.
* @param percentStart La percentuale, rispetto all'inizio del testo,
* rispetto al quale ricavare il punto di taglio iniziale.
* @param percentEnd La percentuale, rispetto all'inizio del testo,
* rispetto al quale ricavare il punto di taglio finale.
* @return La porzione di testo totale interposto tra due eventuali immagini.
*/
public String getTextByRange(int percentStart, int percentEnd) {
String text = super.getText();
int firstCutPoint = HypertextAttributeUtil.getIndexCutPoint(text, percentStart);
int endCutPoint = HypertextAttributeUtil.getIndexCutPoint(text, percentEnd);
String textByRange = text.substring(firstCutPoint, endCutPoint);
return textByRange;
}
@Override
public List<CmsAttributeReference> getReferences(List<Lang> systemLangs) {
List<CmsAttributeReference> refs = new ArrayList<CmsAttributeReference>();
for (int i = 0; i < systemLangs.size(); i++) {
Lang lang = systemLangs.get(i);
String text = this.getTextMap().get(lang.getCode());
List<SymbolicLink> links = HypertextAttributeUtil.getSymbolicLinksOnText(text);
if (null != links && !links.isEmpty()) {
for (int j=0; j<links.size(); j++) {
SymbolicLink symbLink = links.get(j);
if (symbLink.getDestType() != SymbolicLink.URL_TYPE) {
CmsAttributeReference ref = new CmsAttributeReference(symbLink.getPageDest(),
symbLink.getContentDest(), null);
refs.add(ref);
}
}
}
}
return refs;
}
}