/*******************************************************************************
* Copyright (c) 2011, 2012 Mentor Graphics and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Mentor Graphics - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.service.command;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
import org.eclipse.cdt.dsf.gdb.internal.Messages;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
/**
* @since 4.1
*/
public class CustomTimeoutsMap extends HashMap<String, Integer> {
public CustomTimeoutsMap() {
super();
}
public CustomTimeoutsMap( CustomTimeoutsMap map ) {
super( map );
}
private static final long serialVersionUID = -8281280275781904870L;
public String getMemento() {
StringBuilder sb = new StringBuilder();
for ( Map.Entry<String, Integer> entry : entrySet() ) {
sb.append( entry.getKey() );
sb.append( ',' );
sb.append( entry.getValue().intValue() );
sb.append( ';' );
}
return sb.toString();
}
public void initializeFromMemento( String memento ) {
clear();
StringTokenizer st = new StringTokenizer( memento, ";" ); //$NON-NLS-1$
MultiStatus ms = new MultiStatus( GdbPlugin.PLUGIN_ID, 0, Messages.CustomTimeoutsMap_Error_initializing_custom_timeouts, null );
while( st.hasMoreTokens() ) {
String token = st.nextToken();
String[] tokenParts = token.split( "," ); //$NON-NLS-1$
if ( tokenParts.length == 2 && tokenParts[0].length() > 0 && tokenParts[1].length() > 0 ) {
try {
put( tokenParts[0], Integer.valueOf( tokenParts[1] ) );
}
catch( NumberFormatException e ) {
ms.add( new Status(
IStatus.ERROR,
GdbPlugin.PLUGIN_ID,
String.format( Messages.CustomTimeoutsMap_Invalid_custom_timeout_value, tokenParts[0] ) ) );
}
}
else {
ms.add( new Status(
IStatus.ERROR,
GdbPlugin.PLUGIN_ID,
Messages.CustomTimeoutsMap_Invalid_custom_timeout_data ) );
}
}
if ( !ms.isOK() ) {
GdbPlugin.getDefault().getLog().log( ms );
}
}
}