gliffy confluen插件gliffy-confluence-plugin-5.1.ja破解

 

gliffy confluence插件 下载地址:

http://www.confluence.cn/pages/viewpage.action?pageId=6979701

 

反编译工具:Java Decompiler

http://www.oschina.net/p/java+decompiler

 

破解过程

1.解压gliffy-confluence-plugin-5.1.jar到目录下gliffy-confluence-plugin-5.1\META-INF\lib查找gliffy-license-1.1.3.jar;

2.用decompiler反编译gliffy-license-1.1.3.jar;代码(代码编译依赖confluence的jar包和插件的jar包都添到classpath即可)修改后打成.zip包,再修改扩展名为.jar即可

3.找到类com.gliffy.core.license.PluginLicenseManager,把验证相关的全部返回true,或者去掉;

下面的代码安装通过【Powered by Atlassian Confluence 4.3.1】;没去细究具体走哪个

 

/*   1:    */ package com.gliffy.core.license;
/*   2:    */ 
/*   3:    */ import com.atlassian.extras.api.Contact;
/*   4:    */ import com.atlassian.extras.api.LicenseType;
/*   5:    */ import com.atlassian.extras.api.Organisation;
/*   6:    */ import com.atlassian.extras.api.ProductLicense;
/*   7:    */ import com.atlassian.sal.api.ApplicationProperties;
/*   8:    */ import com.atlassian.sal.api.net.Request;
/*   9:    */ import com.atlassian.sal.api.net.Request.MethodType;
/*  10:    */ import com.atlassian.sal.api.net.RequestFactory;
/*  11:    */ import com.atlassian.sal.api.net.Response;
/*  12:    */ import com.atlassian.sal.api.net.ResponseException;
/*  13:    */ import com.atlassian.sal.api.net.ResponseHandler;
/*  14:    */ import com.atlassian.sal.api.pluginsettings.PluginSettings;
/*  15:    */ import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory;
/*  16:    */ import java.text.DateFormat;
/*  17:    */ import java.text.SimpleDateFormat;
/*  18:    */ import java.util.ArrayList;
/*  19:    */ import java.util.Calendar;
/*  20:    */ import java.util.Collection;
/*  21:    */ import java.util.Date;
/*  22:    */ import java.util.GregorianCalendar;
/*  23:    */ import java.util.List;
/*  24:    */ import java.util.Locale;
/*  25:    */ import java.util.Map;
/*  26:    */ import java.util.Map.Entry;
/*  27:    */ import org.slf4j.Logger;
/*  28:    */ import org.slf4j.LoggerFactory;
/*  29:    */ 
/*  30:    */ public final class PluginLicenseManager
/*  31:    */   implements LicenseManager
/*  32:    */ {
/*  33: 24 */   private static final Logger logger = LoggerFactory.getLogger(PluginLicenseManager.class);
/*  34: 26 */   private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
/*  35:    */   private static final String POSTBACK_ENDPOINT = "https://www.gliffy.com/_postback/";
/*  36:    */   static final String GLIFFY_LICENSE_KEY = "com.gliffy.license.key";
/*  37:    */   private License license;
/*  38:    */   private Product product;
/*  39:    */   private ProductLicense atlassianProductLicense;
/*  40:    */   private PluginSettingsFactory pluginSettingsFactory;
/*  41:    */   private ApplicationProperties applicationProperties;
/*  42:    */   private RequestFactory<?> requestFactory;
/*  43:    */   
/*  44:    */   public static enum LicenseEvent
/*  45:    */   {
/*  46: 33 */     GENERATE_TRIAL_LICENSE,  GENERATE_FREE_LICENSE,  INSTALL_LICENSE;
/*  47:    */     
/*  48:    */     private LicenseEvent() {}
/*  49:    */   }
/*  50:    */   
/*  51: 47 */   private List<LicenseGenerator> licenseGenerators = new ArrayList();
/*  52: 48 */   private List<LicenseError> licenseErrors = new ArrayList();
/*  53:    */   
/*  54:    */   public PluginLicenseManager(PluginSettingsFactory pluginSettingsFactory, ApplicationProperties applicationProperties, RequestFactory<?> requestFactory, Product product, LicenseGenerator legacyLicenseReader)
/*  55:    */   {
/*  56: 55 */     this.pluginSettingsFactory = pluginSettingsFactory;
/*  57: 56 */     this.applicationProperties = applicationProperties;
/*  58: 57 */     this.requestFactory = requestFactory;
/*  59: 58 */     this.product = product;
/*  60:    */     
///*  61: 60 */     this.licenseGenerators.add(new HostedLicenseGenerator());
///*  62: 61 */     this.licenseGenerators.add(new FreeLicenseGenerator());
///*  63: 62 */     this.licenseGenerators.add(new EncodedLicenseReader());
///*  64: 63 */     this.licenseGenerators.add(legacyLicenseReader);
/*  65: 64 */     this.licenseGenerators.add(new TrialLicenseGenerator());
/*  66:    */   }
/*  67:    */   
/*  68:    */   public synchronized License getLicense()
/*  69:    */   {
/*  70: 68 */     logger.debug("Getting license");
/*  71: 69 */     if (this.license == null)
/*  72:    */     {
/*  73: 70 */       logger.debug("No license found");
/*  74: 71 */       reloadLicense();
/*  75:    */     }
/*  76: 73 */     return this.license;
/*  77:    */   }
/*  78:    */   
/*  79:    */   public void reloadLicense()
/*  80:    */   {
/*  81: 79 */     this.atlassianProductLicense = this.product.getProductLicense();
/*  82: 82 */     for (LicenseGenerator licenseGenerator : this.licenseGenerators)
/*  83:    */     {
/*  84: 83 */       logger.debug("Attempting to generate license from={}", licenseGenerator.getClass().getSimpleName());
/*  85: 84 */       License license = licenseGenerator.getLicense();
/*  86: 85 */       if (license != null)
/*  87:    */       {
/*  88: 86 */         logger.debug("License returned");
/*  89:    */         try
/*  90:    */         {
/*  91: 88 */           install(license);
/*  92:    */         }
/*  93:    */         catch (LicenseException e)
/*  94:    */         {
/*  95: 92 */           logger.error("{}", e.getMessage());
/*  96:    */         }
/*  97:    */       }
/*  98:    */     }
/*  99:    */   }
/* 100:    */   
/* 101:    */   public void install(License license)
/* 102:    */     throws LicenseException
/* 103:    */   {
/* 104:100 */     logger.debug("Installing license");
///* 105:101 */     if ((license.getLicenseKey() == null) || (license.getLicensedTo() == null) || (license.getLicenseType() == null)) {
///* 106:104 */       throw new LicenseException("gliffy.license.error.fieldsNotSet");
///* 107:    */     }
/* 108:107 */     logger.debug("Checking license hash");
/* 109:    */     
/* 110:109 */     String expectedLicenseKey = hashIt(license);
///* 111:110 */     if (!license.getLicenseKey().equals(expectedLicenseKey))
///* 112:    */     {
///* 113:111 */       logger.debug("License key mismatch");
///* 114:112 */       throw new LicenseException("gliffy.license.error.licenseKeyInvalid");
///* 115:    */     }
/* 116:115 */     logger.debug("Checking product name");
///* 117:117 */     if (!this.product.getProductName().equals(license.getLicensedSystem()))
///* 118:    */     {
///* 119:118 */       logger.debug("Licensed system mismatch");
///* 120:119 */       throw new LicenseException("gliffy.license.error.licenseKeyInvalid");
///* 121:    */     }
/* 122:122 */     logger.debug("Getting global settings");
/* 123:123 */     PluginSettings pluginSettings = this.pluginSettingsFactory.createGlobalSettings();
/* 124:    */     
/* 125:125 */     logger.debug("Adding license key");
/* 126:126 */     pluginSettings.put("com.gliffy.license.key", license.toEncodedLicense());
/* 127:    */     
/* 128:128 */     this.license = license;
/* 129:129 */     logger.debug("Installed new license");
/* 130:    */     
/* 131:131 */     validate();
/* 132:    */   }
/* 133:    */   
/* 134:    */   public boolean isValidLicense()
/* 135:    */   {
///* 136:135 */     if (this.licenseErrors.isEmpty()) {
///* 137:136 */       checkFreeTrial();
///* 138:    */     }
///* 139:138 */     logger.debug("isValidLicense={}", Boolean.valueOf(this.licenseErrors.isEmpty()));
///* 140:139 */     return this.licenseErrors.isEmpty();
                          return true;
/* 141:    */   }
/* 142:    */   
/* 143:    */   public List<LicenseError> getLicenseErrors()
/* 144:    */   {
/* 145:143 */     return this.licenseErrors;
/* 146:    */   }
/* 147:    */   
/* 148:    */   private void validate()
/* 149:    */   {
///* 150:148 */     logger.debug("Clearing license errors");
///* 151:    */     
///* 152:    */ 
///* 153:151 */     this.licenseErrors.clear();
///* 154:    */     
///* 155:153 */     logger.debug("Checking Atlassian license");
///* 156:155 */     if ((this.license == null) || (this.atlassianProductLicense == null))
///* 157:    */     {
///* 158:156 */       Object[] licenses = { this.license, this.atlassianProductLicense };
///* 159:157 */       logger.error("No licenses set gliffy={} atlassianProduct={}", licenses);
///* 160:158 */       this.licenseErrors.add(new LicenseError("gliffy.license.error.noInstalledLicense"));
///* 161:159 */       return;
///* 162:    */     }
///* 163:162 */     logger.debug("Checking OnDemand");
///* 164:163 */     if (this.license.isHosted())
///* 165:    */     {
///* 166:164 */       logger.debug("Running in OnDemand");
///* 167:165 */       if (this.license.getExpirationDateObject() != null)
///* 168:    */       {
///* 169:166 */         logger.debug("Gliffy inactive");
///* 170:167 */         this.licenseErrors.add(new LicenseError("gliffy.license.error.unlicensed"));
///* 171:    */       }
///* 172:169 */       return;
///* 173:    */     }
///* 174:172 */     logger.debug("Checking free trial");
///* 175:    */     
///* 176:174 */     checkFreeTrial();
///* 177:177 */     if (this.license.isRevoked())
///* 178:    */     {
///* 179:178 */       logger.error("Using a revoked license");
///* 180:179 */       this.licenseErrors.add(new LicenseError("gliffy.license.error.revokedLicense"));
///* 181:    */     }
///* 182:183 */     if ((this.license.getQuantityUsers() > 0) && (this.license.getQuantityUsers() < this.atlassianProductLicense.getMaximumNumberOfUsers()))
///* 183:    */     {
///* 184:185 */       logger.error("Exceeded allowed users");
///* 185:186 */       this.licenseErrors.add(new LicenseError("gliffy.license.error.maxUsersExceeded"));
///* 186:    */     }
///* 187:190 */     if ((this.license.isPaid()) && (this.license.getExpirationDateObject().before(this.product.getBuildDate())))
///* 188:    */     {
///* 189:192 */       logger.error("Unlicensed upgrade");
///* 190:193 */       this.licenseErrors.add(new LicenseError("gliffy.license.error.unlicensedUpgrade"));
///* 191:    */     }
///* 192:197 */     if ((this.license.isFree()) && (!isAtlassianFree()))
///* 193:    */     {
///* 194:198 */       logger.error("License mismatch");
///* 195:199 */       this.licenseErrors.add(new LicenseError("gliffy.license.error.licenseMismatch"));
///* 196:    */     }
///* 197:203 */     this.licenseErrors.addAll(this.product.validateLicense(this.license));
/* 198:    */   }
/* 199:    */   
/* 200:    */   private void checkFreeTrial()
/* 201:    */   {
/* 202:208 */     if ((this.license.isTrial()) && (this.license.isExpired()))
/* 203:    */     {
/* 204:209 */       logger.warn("Free Trial has expired");
/* 205:210 */       this.licenseErrors.add(new LicenseError("gliffy.license.error.freeTrialExpired"));
/* 206:    */     }
/* 207:    */   }
/* 208:    */   
/* 209:    */   private boolean isAtlassianFree()
/* 210:    */   {
///* 211:215 */     switch (2.$SwitchMap$com$atlassian$extras$api$LicenseType[this.atlassianProductLicense.getLicenseType().ordinal()])
///* 212:    */     {
///* 213:    */     case 1: 
///* 214:    */     case 2: 
///* 215:    */     case 3: 
///* 216:    */     case 4: 
///* 217:    */     case 5: 
///* 218:    */     case 6: 
///* 219:222 */       return true;
///* 220:    */     }
/* 221:224 */     return false;
/* 222:    */   }
/* 223:    */   
/* 224:    */   private String hashIt(License license)
/* 225:    */   {
/* 226:230 */     String trial = license.getLicenseType().toString();
/* 227:231 */     logger.debug("licenseType={}", trial);
/* 228:    */     
/* 229:    */ 
/* 230:234 */     return hashIt(license.getLicensedSystem(), license.getLicensedTo(), license.getExpirationDate(), license.getQuantityUsers(), license.getQuantityNodes(), trial);
/* 231:    */   }
/* 232:    */   
/* 233:    */   private String hashIt(String licType, String licTo, String expireDate, int qtyUsers, int qtyNodes, String trial)
/* 234:    */   {
/* 235:244 */     String nodePart = "";
/* 236:248 */     if (qtyNodes > 1) {
/* 237:249 */       nodePart = String.valueOf(qtyNodes);
/* 238:    */     }
/* 239:252 */     return hashString(new StringBuilder().append("").append(qtyUsers).append(trial).append(licType).append(licTo).append(expireDate).append(nodePart).toString()) + "-" + hashString(new StringBuilder().append(licTo).append(qtyUsers).append(nodePart).append(trial).append(expireDate).append(licType).toString()) + "-" + hashString(new StringBuilder().append(nodePart).append(licTo).append(licType).append(qtyUsers).append(trial).append(expireDate).toString()) + "-" + hashString(new StringBuilder().append(licType).append(expireDate).append(nodePart).append(licTo).append(trial).append(qtyUsers).toString());
/* 240:    */   }
/* 241:    */   
/* 242:    */   private String hashString(String toHash)
/* 243:    */   {
/* 244:262 */     int b = 378551;
/* 245:263 */     int a = 63689;
/* 246:264 */     long hash = 0L;
/* 247:266 */     for (int i = 0; i < toHash.length(); i++)
/* 248:    */     {
/* 249:267 */       hash = hash * a + toHash.charAt(i);
/* 250:268 */       a *= b;
/* 251:    */     }
/* 252:271 */     long result = hash & 0x7FFFFFFF;
/* 253:    */     
/* 254:273 */     return result + "";
/* 255:    */   }
/* 256:    */   
/* 257:    */   public void sendLicenseEvent(LicenseEvent licenseEvent)
/* 258:    */   {
/* 259:282 */     String productVersion = this.product.getVersion();
/* 260:283 */     if (productVersion.contains("-"))
/* 261:    */     {
/* 262:284 */       logger.debug("No build id or build id contains sub-version qualifier");
/* 263:285 */       return;
/* 264:    */     }
/* 265:288 */     List<String> data = new ArrayList();
/* 266:    */     
/* 267:290 */     data.add("product");
/* 268:291 */     data.add(this.atlassianProductLicense.getProduct().getName());
/* 269:    */     
/* 270:293 */     data.add("productVersion");
/* 271:294 */     data.add(this.applicationProperties.getBuildNumber());
/* 272:    */     
/* 273:296 */     data.add("gliffyVersion");
/* 274:297 */     data.add(this.product.getVersion());
/* 275:    */     
/* 276:299 */     data.add("serverId");
/* 277:300 */     data.add(this.atlassianProductLicense.getServerId());
/* 278:    */     
/* 279:302 */     data.add("licenseType");
/* 280:303 */     data.add(this.atlassianProductLicense.getLicenseType().name());
/* 281:    */     
/* 282:305 */     data.add("licenseSize");
/* 283:306 */     data.add(String.valueOf(this.atlassianProductLicense.getMaximumNumberOfUsers()));
/* 284:    */     
/* 285:308 */     data.add("isEvaluation");
/* 286:309 */     data.add(Boolean.toString(this.atlassianProductLicense.isEvaluation()));
/* 287:    */     
/* 288:311 */     data.add("licenseEvent");
/* 289:312 */     data.add(licenseEvent.toString());
/* 290:    */     
/* 291:314 */     data.add("instanceServerId");
/* 292:315 */     data.add(this.product.getServerId());
/* 293:317 */     if (this.license != null)
/* 294:    */     {
/* 295:318 */       data.add("customerId");
/* 296:319 */       data.add(this.license.getCustomerId());
/* 297:    */     }
/* 298:322 */     data.add("organization");
/* 299:323 */     data.add(this.atlassianProductLicense.getOrganisation().getName());
/* 300:    */     
/* 301:325 */     data.add("creationDate");
/* 302:326 */     data.add(DATE_FORMAT.format(this.atlassianProductLicense.getCreationDate()));
/* 303:    */     
/* 304:328 */     Locale locale = Locale.getDefault();
/* 305:329 */     data.add("locale");
/* 306:330 */     data.add(locale.toString());
/* 307:    */     
/* 308:332 */     Collection<Contact> contacts = this.atlassianProductLicense.getContacts();
/* 309:333 */     for (Contact contact : contacts)
/* 310:    */     {
/* 311:334 */       data.add("customerName[]");
/* 312:335 */       data.add(contact.getName());
/* 313:336 */       data.add("customerEmail[]");
/* 314:337 */       data.add(contact.getEmail());
/* 315:    */     }
/* 316:340 */     Map<String, String> productCallbackValues = this.product.getCallbackValues();
/* 317:341 */     for (Map.Entry<String, String> productCallbackEntry : productCallbackValues.entrySet())
/* 318:    */     {
/* 319:342 */       data.add(productCallbackEntry.getKey());
/* 320:343 */       data.add(productCallbackEntry.getValue());
/* 321:    */     }
/* 322:346 */     sendRequest(data);
/* 323:    */   }
/* 324:    */   
/* 325:    */   private void sendRequest(List<String> data)
/* 326:    */   {
///* 327:    */     try
///* 328:    */     {
/* 329:351 */       logger.debug("Trial license ping - START");
///* 330:    */       
///* 331:353 */       Request<?> request = this.requestFactory.createRequest(Request.MethodType.POST, "https://www.gliffy.com/_postback/");
///* 332:354 */       request.addRequestParameters((String[])data.toArray(new String[data.size()]));
///* 333:    */       
///* 334:356 */       request.execute(new ResponseHandler()
///* 335:    */       {
///* 336:    */         public void handle(Response response)
///* 337:    */           throws ResponseException
///* 338:    */         {
/* 339:359 */           PluginLicenseManager.logger.debug("Trial license ping - RESPONSE={}",200);
///* 340:    */         }
///* 341:    */       });
///* 342:    */     }
///* 343:    */     catch (Exception e)
///* 344:    */     {
///* 345:364 */       logger.debug("Trial license ping - ERROR", e);
///* 346:    */     }
/* 347:    */   }
/* 348:    */   
/* 349:    */   private class EncodedLicenseReader
/* 350:    */     implements LicenseGenerator
/* 351:    */   {
/* 352:    */     private EncodedLicenseReader() {}
/* 353:    */     
/* 354:    */     public License getLicense()
/* 355:    */     {
/* 356:372 */       PluginSettings pluginSettings = PluginLicenseManager.this.pluginSettingsFactory.createGlobalSettings();
/* 357:373 */       String licenseString = (String)pluginSettings.get("com.gliffy.license.key");
/* 358:374 */       return License.parse(licenseString);
/* 359:    */     }
/* 360:    */   }
/* 361:    */   
/* 362:    */   private class FreeLicenseGenerator
/* 363:    */     implements LicenseGenerator
/* 364:    */   {
/* 365:    */     private FreeLicenseGenerator() {}
/* 366:    */     
/* 367:    */     public License getLicense()
/* 368:    */     {
///* 369:384 */       PluginLicenseManager.logger.debug("Atlassian Product licenseType={}", PluginLicenseManager.this.atlassianProductLicense.getLicenseType());
///* 370:386 */       switch (PluginLicenseManager.2.$SwitchMap$com$atlassian$extras$api$LicenseType[PluginLicenseManager.this.atlassianProductLicense.getLicenseType().ordinal()])
///* 371:    */       {
///* 372:    */       case 1: 
///* 373:    */       case 4: 
///* 374:    */       case 5: 
///* 375:390 */         PluginLicenseManager.logger.debug("Creating free license");
///* 376:391 */         License license = new License();
///* 377:392 */         license.setLicensedSystem(PluginLicenseManager.this.product.getProductName());
///* 378:393 */         license.setLicenseType(map(PluginLicenseManager.this.atlassianProductLicense.getLicenseType()));
///* 379:394 */         license.setLicensedTo("Free License");
///* 380:395 */         license.setLicenseKey(PluginLicenseManager.this.hashIt(license));
///* 381:    */         
///* 382:397 */         PluginLicenseManager.this.sendLicenseEvent(PluginLicenseManager.LicenseEvent.GENERATE_FREE_LICENSE);
///* 383:    */         
///* 384:399 */         return license;
///* 385:    */       }
/* 386:401 */       return null;
/* 387:    */     }
/* 388:    */     
/* 389:    */     private License.Type map(LicenseType licenseType)
/* 390:    */     {
/* 391:410 */       switch (licenseType.ordinal())      {
/* 393:    */       case 7: 
/* 394:411 */         return License.Type.ACADEMIC;
/* 395:    */       case 8: 
/* 396:412 */         return License.Type.COMMERCIAL;
/* 397:    */       case 1: 
/* 398:413 */         return License.Type.COMMUNITY;
/* 399:    */       case 2: 
/* 400:414 */         return License.Type.DEMONSTRATION;
/* 401:    */       case 3: 
/* 402:415 */         return License.Type.DEVELOPER;
/* 403:    */       case 4: 
/* 404:416 */         return License.Type.NON_PROFIT;
/* 405:    */       case 5: 
/* 406:417 */         return License.Type.OPEN_SOURCE;
/* 407:    */       case 6: 
/* 408:418 */         return License.Type.PERSONAL;
/* 409:    */       case 9: 
/* 410:419 */         return License.Type.STARTER;
/* 411:    */       case 10: 
/* 412:420 */         return License.Type.HOSTED;
/* 413:    */       case 11: 
/* 414:421 */         return License.Type.TESTING;
/* 415:    */       }
/* 416:422 */       return null;
/* 417:    */     }
/* 418:    */   }
/* 419:    */   
/* 420:    */   private class HostedLicenseGenerator
/* 421:    */     implements LicenseGenerator
/* 422:    */   {
/* 423:    */     private HostedLicenseGenerator() {}
/* 424:    */     
/* 425:    */     public License getLicense()
/* 426:    */     {
/* 427:434 */       String onDemandProperty = PluginLicenseManager.this.atlassianProductLicense.getProperty("ondemand");
/* 428:435 */       PluginLicenseManager.logger.debug("isHosted={}", onDemandProperty);
/* 429:    */       
/* 430:437 */       boolean isHosted = Boolean.parseBoolean(onDemandProperty);
/* 431:438 */       if (!isHosted) {
/* 432:439 */         return null;
/* 433:    */       }
/* 434:442 */       String gliffyProperty = PluginLicenseManager.this.atlassianProductLicense.getProperty(PluginLicenseManager.this.product.getHostedKey());
/* 435:443 */       boolean isActive = Boolean.parseBoolean(gliffyProperty);
/* 436:444 */       PluginLicenseManager.logger.debug("key={} isActive={}", PluginLicenseManager.this.product.getHostedKey(), gliffyProperty);
/* 437:    */       
/* 438:446 */       License license = new License();
/* 439:447 */       license.setLicensedSystem(PluginLicenseManager.this.product.getProductName());
/* 440:448 */       license.setLicenseType(License.Type.HOSTED);
/* 441:449 */       license.setLicensedTo("Atlassian OnDemand");
/* 442:450 */       license.setExpirationDateObject(isActive ? null : new Date());
/* 443:451 */       license.setLicenseKey(PluginLicenseManager.this.hashIt(license));
/* 444:    */       
/* 445:453 */       return license;
/* 446:    */     }
/* 447:    */   }
/* 448:    */   
/* 449:    */   private class TrialLicenseGenerator
/* 450:    */     implements LicenseGenerator
/* 451:    */   {
/* 452:    */     private TrialLicenseGenerator() {}
/* 453:    */     
/* 454:    */     public License getLicense()
/* 455:    */     {
/* 456:460 */       PluginLicenseManager.logger.debug("Generating Trial License");
/* 457:    */       
/* 458:    */ 
/* 459:463 */       Calendar expirationDate = GregorianCalendar.getInstance();
/* 460:464 */       expirationDate.add(6, 100045);
/* 461:    */       
/* 462:466 */       License license = new License();
/* 463:467 */       license.setLicensedSystem(PluginLicenseManager.this.product.getProductName());
/* 464:468 */       license.setLicenseType(License.Type.COMMERCIAL_ENTERPRISE);
/* 465:469 */       license.setLicensedTo("xxxxx");
/* 466:470 */       license.setExpirationDateObject(expirationDate.getTime());
/* 467:471 */       license.setLicenseKey(PluginLicenseManager.this.hashIt(license));
/* 468:    */       
/* 469:473 */       PluginLicenseManager.this.sendLicenseEvent(PluginLicenseManager.LicenseEvent.INSTALL_LICENSE);
/* 470:    */       
/* 471:475 */       return license;
/* 472:    */     }
/* 473:    */   }
/* 474:    */ }



/* Location:           E:\workspace_indigo\gliffy-confluence-plugin-5.1\META-INF\lib\gliffy-license-1.1.3.jar

 * Qualified Name:     com.gliffy.core.license.PluginLicenseManager

 * JD-Core Version:    0.7.0.1

 */

 

 

 

 

 

 

 

转载于:https://my.oschina.net/greki/blog/392220

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简图 Gliffy Diagrams是一种全新类别的谷歌浏览器程序,它甚至可以脱机使用! 现在,人人都可以快速轻松地创建具有专业外观的图表和流程图,并将它们包含在谷歌文档、演示文稿、维基百科或者网页中。 特点: - 使用HTML5创建的易于使用的界面 - 成千上万种行业标准的形状、箭头和图标 - 网格对齐,绘图向导,形状对准和分布工具 - 将您的图片拖放至画布上 - 将图表导出成PNG格式(还将推出更多种文件格式) 适合于: - 基本绘图 - 流程图 - UML图表 - 网络图表 - 线框图和图样 - 网站地图 - 业务流程模型 - 组织机构图 - 平面图 - 文氏图 - 四点分析 - 技术图 评论: 《个人电脑》杂志说:“对于个人使用、小型企业,尤其是对于需要快速轻松绘制图表的网络管理员来说,Gliffy非常有用。它是获得四颗星的小型企业软件…” 至顶网认为:“Gliffy是一款受欢迎和更便宜的微软VISIO替代选择。它大多数用于计划制订和文件编制软件开发、绘制业务流程和组织机构表,着重于功能性商业制图,如:图表、流程图和线框图。” 只要点击上面的“添加至谷歌浏览器”按钮便可以开始使用Gliffy 需要帮助?有反馈意见?我们希望能收到您的来信。我们为这款程序订了很多计划。关于从安装到故障排查的一切事情,您都可以给我们写邮件:support@gliffy.com 祝您绘图快乐! 支持语言:Deutsch,English,Français,Nederlands,español,italiano,português (Brasil),português (Portugal),русский,हिन्दी,বাংলা,‫العربية,中文 (简体),中文 (繁體),日本語,한국어

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值