package com.netifera.platform.net.dns.internal.ui; import java.util.Iterator; import java.util.Locale; import org.eclipse.swt.graphics.Image; import com.netifera.platform.api.model.IShadowEntity; import com.netifera.platform.net.dns.model.AAAARecordEntity; import com.netifera.platform.net.dns.model.ARecordEntity; import com.netifera.platform.net.dns.model.DomainEntity; import com.netifera.platform.net.dns.model.EmailAddressEntity; import com.netifera.platform.net.dns.model.MXRecordEntity; import com.netifera.platform.net.dns.model.NSRecordEntity; import com.netifera.platform.net.dns.model.PTRRecordEntity; import com.netifera.platform.net.model.HostEntity; import com.netifera.platform.net.model.InternetAddressEntity; import com.netifera.platform.net.model.NetworkAddressEntity; import com.netifera.platform.ui.api.model.IEntityInformationProvider; import com.netifera.platform.ui.api.model.IEntityLabelProvider; import com.netifera.platform.ui.images.ImageCache; public class EntityLabelProvider implements IEntityLabelProvider, IEntityInformationProvider { private final static String PLUGIN_ID = "com.netifera.platform.net.dns.ui"; private ImageCache images = new ImageCache(PLUGIN_ID); private static final String DOMAIN = "icons/domain.png"; private static final String EMAIL = "icons/email_address.png"; private static final String ARECORD = "icons/pointer.png"; private static final String PTRRECORD = "icons/pointer-back.png"; private static final String MXRECORD = "icons/email.png"; private static final String NSRECORD = "icons/dns.png"; public String getText(IShadowEntity e) { if (e instanceof DomainEntity) { return ((DomainEntity) e).getFQDM(); } else if (e instanceof EmailAddressEntity) { EmailAddressEntity email = (EmailAddressEntity) e; if (email.getName() != null) return email.getName()+" <"+email.getAddress()+">"; else return email.getAddress(); } else if (e instanceof ARecordEntity) { ARecordEntity hostname = (ARecordEntity) e; return hostname.getHostName() + " A " + hostname.getAddressEntity().getAddress(); } else if (e instanceof AAAARecordEntity) { AAAARecordEntity hostname = (AAAARecordEntity) e; return hostname.getHostName() + " AAAA " + hostname.getAddressEntity().getAddress(); } else if (e instanceof PTRRecordEntity) { PTRRecordEntity ptr = (PTRRecordEntity) e; return ptr.getAddressEntity().getAddress() + " PTR " + ptr.getName(); } else if (e instanceof NSRecordEntity) { NSRecordEntity ns = (NSRecordEntity) e; return "NS " + ns.getTarget(); } else if (e instanceof MXRecordEntity) { MXRecordEntity mx = (MXRecordEntity) e; return "MX " + mx.getPriority() + " " + mx.getTarget(); } return null; } public String getFullText(IShadowEntity e) { return getText(e); } public Image getImage(IShadowEntity e) { if (e instanceof DomainEntity) { return images.get(DOMAIN); } else if (e instanceof EmailAddressEntity) { return images.get(EMAIL); } else if (e instanceof ARecordEntity || e instanceof AAAARecordEntity) { return images.get(ARECORD); } else if (e instanceof PTRRecordEntity) { return images.get(PTRRECORD); } else if (e instanceof NSRecordEntity) { return images.get(NSRECORD); } else if (e instanceof MXRecordEntity) { return images.get(MXRECORD); } return null; } public Image decorateImage(Image image, IShadowEntity e) { return null; } public String getInformation(IShadowEntity e) { if (e instanceof HostEntity) { return getHostInformation((HostEntity)e); } return null; } private String getHostInformation(HostEntity e) { StringBuffer buffer = new StringBuffer(); if (e.getLabel() != null) { Iterator<NetworkAddressEntity> addresses = e.getAddresses().iterator(); boolean hasNames = false; while (addresses.hasNext()) { NetworkAddressEntity a = addresses.next(); if (a instanceof InternetAddressEntity) { Iterator<String> names = ((InternetAddressEntity)a).getNames().iterator(); if (names.hasNext()) { if (!hasNames) { buffer.append("<p>Names: "); hasNames = true; } while (names.hasNext()) { buffer.append(escape(names.next())); if (names.hasNext()) buffer.append(", "); } buffer.append(" ("+escape(a.getAddressString())+")"); if (addresses.hasNext()) buffer.append("; "); } } } if (hasNames) buffer.append("</p>"); } String countryCode = e.getDefaultAddress().getNamedAttribute("country"); if (countryCode != null) { Locale locale = new Locale("en", countryCode); String countryName = locale.getDisplayCountry(Locale.ENGLISH); buffer.append("<p>Country: "+escape(countryName)+"</p>"); } return buffer.toString(); } private String escape(String data) { data = data.replaceAll("&", "&"); data = data.replaceAll("<", "<"); data = data.replaceAll(">", ">"); data = data.trim().replaceAll("[\\r\\n]+", "</p><p>"); return data.replaceAll("[^\\p{Print}\\p{Blank}]", "."); // non-printable chars } public void dispose() { images.dispose(); } public Integer getSortingCategory(IShadowEntity e) { if(e instanceof DomainEntity) return 1; return null; } public Integer compare(IShadowEntity e1, IShadowEntity e2) { return null; } }