/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.netbeans.lib.cvsclient.response;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;
/**
* Create response objects appropriate for handling different types of response
*
* @author Robert Greig
*/
public class ResponseFactory {
private final Map responseInstancesMap;
private String previousResponse = null;
public ResponseFactory() {
responseInstancesMap = new HashMap();
responseInstancesMap.put("E", new ErrorMessageResponse()); // NOI18N
responseInstancesMap.put("M", new MessageResponse()); // NOI18N
responseInstancesMap.put("Mbinary", new MessageBinaryResponse()); // NOI18N
responseInstancesMap.put("MT", new MessageTaggedResponse()); // NOI18N
responseInstancesMap.put("Updated", new UpdatedResponse()); // NOI18N
responseInstancesMap.put("Update-existing", new UpdatedResponse()); // NOI18N
responseInstancesMap.put("Created", new CreatedResponse()); // NOI18N
responseInstancesMap.put("Rcs-diff", new RcsDiffResponse()); // NOI18N
responseInstancesMap.put("Checked-in", new CheckedInResponse()); // NOI18N
responseInstancesMap.put("New-entry", new NewEntryResponse()); // NOI18N
responseInstancesMap.put("ok", new OKResponse()); // NOI18N
responseInstancesMap.put("error", new ErrorResponse()); // NOI18N
responseInstancesMap.put("Set-static-directory", new SetStaticDirectoryResponse()); // NOI18N
responseInstancesMap.put("Clear-static-directory", new ClearStaticDirectoryResponse()); // NOI18N
responseInstancesMap.put("Set-sticky", new SetStickyResponse()); // NOI18N
responseInstancesMap.put("Clear-sticky", new ClearStickyResponse()); // NOI18N
responseInstancesMap.put("Valid-requests", new ValidRequestsResponse()); // NOI18N
responseInstancesMap.put("Merged", new MergedResponse()); // NOI18N
responseInstancesMap.put("Notified", new NotifiedResponse()); // NOI18N
responseInstancesMap.put("Removed", new RemovedResponse()); // NOI18N
responseInstancesMap.put("Remove-entry", new RemoveEntryResponse()); // NOI18N
responseInstancesMap.put("Copy-file", new CopyFileResponse()); // NOI18N
responseInstancesMap.put("Mod-time", new ModTimeResponse()); // NOI18N
responseInstancesMap.put("Template", new TemplateResponse()); // NOI18N
responseInstancesMap.put("Module-expansion", new ModuleExpansionResponse()); // NOI18N
responseInstancesMap.put("Wrapper-rcsOption", new WrapperSendResponse()); // NOI18N
}
public Response createResponse(String responseName) {
Response response = (Response) responseInstancesMap.get(responseName);
if (response != null) {
previousResponse = responseName;
return response;
}
if (previousResponse != null && previousResponse.equals("M")) { // NOI18N
return new MessageResponse(responseName);
}
previousResponse = null;
IllegalArgumentException2 ex = new IllegalArgumentException2("Unhandled response: " + // NOI18N
responseName + "."); // NOI18N
// assemble reasonable localized message
String cvsServer = System.getenv("CVS_SERVER"); // NOI18N
if (cvsServer == null) {
cvsServer = ""; // NOI18N
} else {
cvsServer = "=" + cvsServer; // NOI18N
}
String cvsExe = System.getenv("CVS_EXE"); // NOI18N
if (cvsExe == null) {
cvsExe = ""; // NOI18N
} else {
cvsExe = "=" + cvsExe; // NOI18N
}
ResourceBundle bundle = ResourceBundle.getBundle("org.netbeans.lib.cvsclient.response.Bundle"); // NOI18N
String msg = bundle.getString("BK0001");
msg = MessageFormat.format(msg, new Object[] { responseName, cvsServer, cvsExe });
ex.setLocalizedMessage(msg);
throw ex;
}
private static class IllegalArgumentException2 extends IllegalArgumentException {
private String localizedMessage;
public IllegalArgumentException2(String s) {
super(s);
}
@Override
public String getLocalizedMessage() {
return localizedMessage;
}
private void setLocalizedMessage(String localizedMessage) {
this.localizedMessage = localizedMessage;
}
}
}