This commit is contained in:
daihh
2022-11-20 10:40:58 +08:00
parent f2147a5366
commit 9798469f3a
5 changed files with 216 additions and 0 deletions

View File

@@ -29,6 +29,26 @@
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>net.sourceforge.cardme</groupId>
<artifactId>cardme</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>

View File

@@ -0,0 +1,89 @@
package com.xboe.module.scorm.common;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.net.URI;
import java.time.Duration;
import java.time.Instant;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
public class CommonUtils {
private static final Set<String> LANGUAGE_CODES = new HashSet<>(Arrays.asList(Locale.getISOLanguages()));
private static final Set<String> LANGUAGE_SUBCODES = new HashSet<>(Arrays.asList(Locale.getISOCountries()));
static {
Set<String> iso3 = new HashSet<>();
for (String languageCode : LANGUAGE_CODES) {
try {
iso3.add(new Locale(languageCode).getISO3Language());
} catch (Exception ignored) {
}
}
LANGUAGE_CODES.addAll(iso3);
}
public static String stringifyError(Throwable error) {
StringWriter result = new StringWriter();
PrintWriter printer = new PrintWriter(result);
error.printStackTrace(printer);
printer.close();
return result.toString();
}
public static String format(String format, Object... objects) {
return String.format(format.replace("{}", "%s"), objects);
}
public static boolean isLegalLanguage(String language) {
if (StringUtils.isBlank(language)) {
return false;
}
String[] code = language.split("-");
boolean result;
if (code.length == 1 || code.length == 2) {
result = LANGUAGE_CODES.contains(code[0]);
if (code.length == 2) {
result &= LANGUAGE_SUBCODES.contains(code[1]);
}
} else {
result = false;
}
return result;
}
public static boolean isLegalURI(String uri) {
try {
//noinspection ResultOfMethodCallIgnored
URI.create(uri);
return true;
} catch (Exception e) {
return false;
}
}
public static boolean isLegalTime(String time) {
try {
Instant.parse(time);
return true;
} catch (Exception e) {
return false;
}
}
public static boolean isLegalDuration(String duration) {
try {
Duration.parse(duration);
return true;
} catch (Exception e) {
return false;
}
}
}

View File

@@ -0,0 +1,65 @@
package com.xboe.module.scorm.common;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
public final class ID {
private final String identifier;
private final String lmsContentPackageID;
private final String lmsLearnerID;
public ID(String identifier, String lmsContentPackageID, String lmsLearnerID) {
this.identifier = identifier;
this.lmsContentPackageID = lmsContentPackageID;
this.lmsLearnerID = lmsLearnerID;
}
public final String getIdentifier() {
return identifier;
}
public final String getLmsContentPackageID() {
return lmsContentPackageID;
}
public final String getLmsLearnerID() {
return lmsLearnerID;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ID id = (ID) o;
return new EqualsBuilder()
.append(identifier, id.identifier)
.append(lmsContentPackageID, id.lmsContentPackageID)
.append(lmsLearnerID, id.lmsLearnerID)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder(17, 37)
.append(identifier)
.append(lmsContentPackageID)
.append(lmsLearnerID)
.toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this)
.append("identifier", identifier)
.append("lmsContentPackageID", lmsContentPackageID)
.append("lmsLearnerID", lmsLearnerID)
.toString();
}
}

View File

@@ -0,0 +1,11 @@
package com.xboe.module.scorm.common;
public interface LMSPersistDriver {
String querySCORMPackageZipFilePathBy(String lmsContentPackageID);
int queryActivityAttemptCountBy(String lmsContentPackageID, String activityID, String learnerID);
void saveActivityAttemptCount(String lmsContentPackageID, String activityID, String learnerID, int attemptCount);
}

View File

@@ -0,0 +1,31 @@
package com.xboe.module.scorm.common;
public class LMSPersistDriverManager {
private static LMSPersistDriverManager instance;
private LMSPersistDriver driver;
private LMSPersistDriverManager() {
}
public static LMSPersistDriverManager getInstance() {
if (instance == null) {
synchronized (LMSPersistDriverManager.class) {
if (instance == null) {
instance = new LMSPersistDriverManager();
}
}
}
return instance;
}
public void registerDriver(LMSPersistDriver lmsPersistDriver) {
this.driver = lmsPersistDriver;
}
public LMSPersistDriver getDriver() {
return driver;
}
}