git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@1000
180e2498-e6e9-4542-8430-
84ac67f01cd8
private static class ManufacturerList extends ConcurrentHashMap<String,Manufacturer> {
void add( Manufacturer m ) {
private static class ManufacturerList extends ConcurrentHashMap<String,Manufacturer> {
void add( Manufacturer m ) {
- for( String s : m.getAllNames() ) {
+ for( String s : m.getSearchNames() ) {
Manufacturer previousRegistered;
if ( (previousRegistered = putIfAbsent( s, m )) != null ) {
throw new IllegalStateException("Manufacturer name clash between " +
Manufacturer previousRegistered;
if ( (previousRegistered = putIfAbsent( s, m )) != null ) {
throw new IllegalStateException("Manufacturer name clash between " +
+ Set<String> getSearchNames() {
+ return searchNames;
+ }
/**
* Return the motor type that this manufacturer produces if it produces only one motor type.
/**
* Return the motor type that this manufacturer produces if it produces only one motor type.
* @return the Manufacturer object corresponding the name.
*/
public static Manufacturer getManufacturer(String name) {
* @return the Manufacturer object corresponding the name.
*/
public static Manufacturer getManufacturer(String name) {
- Manufacturer m = manufacturers.get(name);
+ String searchString = generateSearchString(name);
+ Manufacturer m = manufacturers.get(searchString);
if ( m != null ) {
return m;
}
m = new Manufacturer(name.trim(), name.trim(), Motor.Type.UNKNOWN);
if ( m != null ) {
return m;
}
m = new Manufacturer(name.trim(), name.trim(), Motor.Type.UNKNOWN);
- Manufacturer oldManu = manufacturers.putIfAbsent(name, m);
- return (oldManu != null) ? oldManu : m;
+ // We need some additional external synchronization here so we lock on the manufacturers.
+ synchronized( manufacturers ) {
+ Manufacturer retest = manufacturers.get(searchString);
+ if ( retest != null ) {
+ // it exists now.
+ return retest;
+ }
+ manufacturers.add(m);
+ }
+ return m;
-
-
-
- private String generateSearchString(String str) {
+ private static String generateSearchString(String str) {
return str.toLowerCase(Locale.getDefault()).replaceAll("[^a-zA-Z0-9]+", " ").trim();
}
return str.toLowerCase(Locale.getDefault()).replaceAll("[^a-zA-Z0-9]+", " ").trim();
}
+ public void testContrail() {
+ Manufacturer c1, c2;
+
+ c1 = Manufacturer.getManufacturer("Contrail" );
+
+ // Used in rsp files.
+ c2 = Manufacturer.getManufacturer("Contrail_Rockets");
+
+ assertNotNull(c1);
+ assertEquals(c1,c2);
+ }
+
@Test
public void testNew() {
@Test
public void testNew() {